无法使用应用程序组访问NSUserDefaults

do *_*ter 11 xcode nsuserdefaults ios swift ios-app-group

我正在开发一个应用程序和一个小部件,小部件需要从app获取数据.我已经使用以下代码在NSUserDefaults上进行读写.我也用于$(PRODUCT_BUNDLE_IDENTIFIER).widget小部件并$(PRODUCT_BUNDLE_IDENTIFIER)参考这篇文章.但是widget无法从app或NSUserDefaults获取数据.我怎样才能使它工作?

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

}
Run Code Online (Sandbox Code Playgroud)

///////

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)")
}
Run Code Online (Sandbox Code Playgroud)

Ras*_*n L 44

要从同一组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")
Run Code Online (Sandbox Code Playgroud)

从NSUserDefaults阅读:

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

if !firstLaunch  {
   ...
}
Run Code Online (Sandbox Code Playgroud)

Swift 4.x:

写:

UserDefaults(suiteName: "group.myapp.test")!.set(true, forKey: "FirstLaunch")
Run Code Online (Sandbox Code Playgroud)

读:

UserDefaults(suiteName: "group.myapp.test")!.bool(forKey: "FirstLaunch")
Run Code Online (Sandbox Code Playgroud)