そのため、共有UserDefaultsを正しく設定するためにすべての手順を調べて実行してきましたが、何かが足りないはずです。
アプリと拡張機能の両方でアプリグループ機能を有効にしています。どちらも同じスイート名(_"group.TestSharedPreferences"
_)を使用しており、次のように記述しています。
_struct Preferences {
static let shared = UserDefaults(suiteName: "group.TestSharedPreferences")!
}
_
viewDidLoad
:
_Preferences.shared.set(1, forKey: "INT")
_
そして読むために:
_Preferences.shared.integer(forKey: "INT") // Returns 1 in Container App
Preferences.shared.integer(forKey: "INT") // Returns 0 in Today Extension
_
_"INT"
_を設定した直後にsynchronize()
を使用しても、拡張機能で取得された値は、コンテナーAppに保存された値ではありません。私が欠けているかもしれないものについてのアイデアはありますか?ありがとうございました!
ここで段階的に掘り下げることをお勧めします。
まず、メインアプリとウィジェット拡張機能の両方でアプリグループ機能が有効になっていて、同じものを使用してアクティブ化されていることを確認します(チェックマークを設定する必要があります)。アプリグループ名:
今日のウィジェット拡張:
次に、直接設定/取得アクセスを使用して簡単なテストを行います。メインアプリのAppDelegate.didFinishLaunchingWithOptions
メソッド(アプリグループ名とキーを必要に応じて変更します):
if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") {
userDefaults.set("test 1" as AnyObject, forKey: "key1")
userDefaults.set("test 2" as AnyObject, forKey: "key2")
userDefaults.synchronize()
}
Today Widget ExtensionのViewControllerで:
if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") {
let value1 = userDefaults.string(forKey: "key1")
let value2 = userDefaults.string(forKey: "key2")
...
}
これが機能する場合、問題はPreferences
シングルトンに関連している必要があります。