Dre*_*ens 3 ios swift ios-app-group
我有一个分享扩展的iOS应用程序.我正在尝试使用NSUserDefaults和App Groups在它们之间共享数据,但是,虽然我可以写入NSUD对象,但是读取它并且synchronize()没有错误,读取扩展名总是会导致nil.
我有一个应用程序组,文字字符串"group.net.foo.bar",应用程序和扩展程序都在功能 - >应用程序组下配置.这个字符串在我的app中的constants结构中:
struct Forum {
static let APP_GROUP = "group.net.foo.bar"
static let AUTH_KEY = "AUTH_KEY"
}
Run Code Online (Sandbox Code Playgroud)
在主应用程序中,我创建一个UserDefaults对象并写入它:
fileprivate lazy var userDefaults: UserDefaults = {
let defaults = UserDefaults()
defaults.addSuite(named: Forum.APP_GROUP)
return defaults
}()
// later
userDefaults.set(apiKey, forKey: Forum.AUTH_KEY)
userDefaults.synchronize()
Run Code Online (Sandbox Code Playgroud)
之后创建一个新的NSUD对象synchronize()并检索AUTH_KEY.在扩展中,我创建了一个NSUD并尝试检索该值,但无济于事:
private lazy var userDefaults: UserDefaults = {
let defaults = UserDefaults()
defaults.addSuite(named: Forum.APP_GROUP)
return defaults
}()
// later
private func getApiKey() -> String? {
return userDefaults.string(forKey: Forum.AUTH_KEY)
}
// returns nil
Run Code Online (Sandbox Code Playgroud)
在我阅读Apple文档和Stack Overflow中令人沮丧的类似问题的所有内容中,我无法理解我做错了什么.
Xcode版本8.0(8A218a),也使用Xcode 8.1 Beta 2进行了测试.模拟器和运行iOS 10的iPhone 6s上的行为相同.
不确定是否defaults.addSuite(named: ...)一样UserDefaults(suiteName: ...).在我的应用程序中,我以这种方式使用appGroups,它按预期工作:
// write
if let userDefaults = UserDefaults(suiteName: appGroupName) {
userDefaults.set("---" as AnyObject, forKey: "distance")
userDefaults.set("---" as AnyObject, forKey: "altitude")
...
userDefaults.synchronize()
}
// read
if let userDefaults = UserDefaults(suiteName: appGroupName) {
self.distanceLabel.text = userDefaults.string(forKey: "distance")
self.altitudeLabel.text = userDefaults.string(forKey: "altitude")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2849 次 |
| 最近记录: |