6

以前にこれを行ったことがありますが、何も機能していないようです。これが私のコードです:

iOS アプリに保存する

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")
groupDefaults?.setObject(theArray, forKey: "theKey")
groupDefaults?.synchronize()

読み取り (iOS では動作しますが、WatchOS 2 では動作しません)

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")

if groupDefaults!.objectForKey("theKey") != nil {
    textEmojiArray = NSMutableArray(array: groupDefaults!.objectForKey("theKey") as! NSArray)
} else {        
    //error
}

両方の .entitlements ファイルに group.company.appSharedDefaults が含まれています

両方のターゲットでアプリ グループ機能がオンになっており、適切なグループがオフになっています。

現在、ウォッチで読み取りコードを実行すると、objectForKey は nil を返しますが、iOS では動作します (デバイスとシミュレーターの結果は同じです)。

何が足りないの!?

4

1 に答える 1

12

watchOS 2 では、2 つの異なるプロセスが実行されていることに注意する必要があります。

  1. Apple Watch プロセス
  2. iPhoneのプロセス

これらのプロセスはどちらも独自のサンドボックスを持っているため、「ネイティブ」と呼ばれています。共有の NSUserDefaults を使用しようとしても、Apple Watch アプリにはホスト iPhone アプリとはまったく異なるサンドボックスがあるため、機能しません。

電話から Apple Watch ターゲットの NSUserDefaults に何かを保存する場合:

WatchConnectivityを使用して、保存するデータを時計に送信します。次に、送信したデータをウォッチが受信したら、Apple ウォッチのデフォルトの NSUserDefaults に保存します。

于 2015-09-03T20:06:06.260 に答える