web-dev-qa-db-ja.com

アプリグループを相互に使用してNSUserDefaultsにアクセスすることはできません

ウィジェットがアプリからデータを取得するために必要なアプリとウィジェットに取り組んでいます。 NSUserDefaultsの読み取りと書き込みには、次のコードを使用しました。また、ウィジェットには$(PRODUCT_BUNDLE_IDENTIFIER).widgetを使用し、 this postを参照して$(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)")
}
11
do it better

NSUserDefaultsの同じセットから読み取って保存するには、次のことを行う必要があります。

  1. メインアプリで、プロジェクトナビゲーターでプロジェクトを選択します。
  2. メインのアプリターゲットを選択し、[機能]タブを選択します。
  3. アプリグループをオンにします(これにより、一連の資格や関連するアプリIDなどが生成されるため、開発者ポータルと通信します)。
  4. 新しいコンテナを作成します。ヘルプによると、「group。」で始まる必要があるため、「group.myapp.test」のような名前を付けます。
  5. Today Extensionターゲットを選択し、アプリグループをオンにするこのプロセスを繰り返します。新しいグループを作成するのではなく、この新しく作成されたグループを選択して、TodayExtensionがグループのメンバーであることを示します。

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")
44
Rashwan L