私は共有拡張子を持つiOSアプリを持っています。 NSUserDefaultsとApp Groupsを使用してデータを共有しようとしていますが、NSUDオブジェクトに書き込むことができますが、synchronize()
はエラーなしで、拡張子は常にnil
になります。NSUserDefaultsがアプリと共有拡張の間で動作しないのはなぜですか?
私は、アプリケーショングループがあります。リテラル文字列 "group.net.foo.bar"は、&という拡張子がCapabilities - > App Groupsで設定されています。この文字列は、私のアプリでは、定数の構造体である:
私はUserDefaultsオブジェクトを作成し、それへの書き込みのメインアプリでstruct Forum {
static let APP_GROUP = "group.net.foo.bar"
static let AUTH_KEY = "AUTH_KEY"
}
:
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()
そのsynchronize()
後に新しいNSUDオブジェクトの作成と取得します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
を私は間違ってやった。
Xcodeのバージョン8.0(8A218a)、また私のiPhone 6Sはdefaults.addSuite(named: ...)
がUserDefaults(suiteName: ...)
と同じにしなければわからないのiOS 10.
ブラボー、それです。 'defaults.addSuite(named:...)'が何のためのものなのか? –
よろしくお願いします。上記のように、私はよく分かりません。ドキュメントは多少混乱しています。 – zisoft
実際、私が見つけた現在の例はすべて、 'initWithSuiteName'を使ったObjCやSwift 2.3で見つかったので、私はうまくいったと思います。 Swift 3.0はこれを改名し、 'userDefaultsObject.addSuite(named:...)'が私が見た最も近いものだと思いました。名前が変更されたコンストラクタが見つかりませんでした。 –