一尘不染

无法使用另一个应用程序组访问NSUserDefaults

swift

我正在开发一个应用程序和一个小部件,该小部件需要从应用程序获取数据。我使用以下代码在NSUserDefaults上进行读写。而且我还使用$(PRODUCT_BUNDLE_IDENTIFIER).widget了小部件并$(PRODUCT_BUNDLE_IDENTIFIER)引用了这篇文章。但是小部件无法从应用程序或NSUserDefaults获取数据。我该如何运作?

func addTask(name: String?) {
    let key = "keyString"
    tasks.append(name!)
    let defaults = NSUserDefaults(suiteName: "group.Mins")
    defaults?.setObject(tasks, forKey: key)
    defaults?.synchronize()

}

///////

let defaults = NSUserDefaults(suiteName: "group.Mins")
let key = "keyString"

if let testArray : AnyObject = defaults?.objectForKey(key) {
    let readArray : [String] = testArray as! [String]
    timeTable = readArray
    timeTable = timeTable.sort(<)
    print("GOT IT")
    print("timetable: \(timeTable)")
}

阅读 229

收藏
2020-07-07

共1个答案

一尘不染

要从同一组NSUserDefaults中读取和保存,需要执行以下操作:

  1. 在您的主应用程序中,在项目导航器中选择您的项目。
  2. 选择您的主要应用目标,然后选择功能选项卡。
  3. 打开应用程序组(这将与开发人员门户进行通信,因为它会生成一组权利以及相关的应用程序ID等)。
  4. 创建一个新的容器。根据帮助,它必须以“ group。”开头,因此命名为“ group.myapp.test”。
  5. 选择您的Today Extension目标,然后重复此打开应用程序组的过程。不要创建一个新的组,而是选择这个新创建的组以表示Today Extension是该组的成员。

写入您的NSUserDefaults:

// In this example I´m setting FirstLaunch value to true 
NSUserDefaults(suiteName: "group.myapp.test")!.setBool(true, forKey: "FirstLaunch")

从NSUserDefaults读取:

// Getting the value from FirstLaunch
let firstLaunch = NSUserDefaults(suiteName: "group.myapp.test")!.boolForKey("FirstLaunch")

if !firstLaunch  {
   ...
}

Swift 4.x:

写:

UserDefaults(suiteName: "group.myapp.test")!.set(true, forKey: "FirstLaunch")

读:

UserDefaults(suiteName: "group.myapp.test")!.bool(forKey: "FirstLaunch")
2020-07-07