2

最近スウィフトを始めたばかりで、アプリ グループを使用して iOS デバイス間でデータを共有することで問題が発生しました。

基本的に、以下の手順に従ってプロジェクトをセットアップしました。

【iPhone】

  • iPhone ターゲットの有効なアプリ グループ
  • 以下の初期化データ (groupID は、プロジェクトで設定したものと一致します):

    sharedDefaults = NSUserDefaults.init(suiteName: groupID)
    sharedDefaults?.setObject("User Default Shared String", forKey: "test")
    sharedDefaults?.synchronize()
    
  • ログに表示できるユーザーデフォルトをローカルにロードして、テスト文字列を再確認しました。

    let t_sharedDefaults =  NSUserDefaults.init(suiteName: groupID);
    t_sharedDefaults?.synchronize();
    let str = t_sharedDefaults?.valueForKey("test") as! String;
    print(str);
    

【ウォッチ延長】

  • 新しいウォッチ拡張ターゲットを作成します。
  • アプリ グループを有効にします。
  • 以下のコードを使用して、コンテキストを使用して起動中のユーザーの既定のデータを読み込みます。

    sharedDefaults = NSUserDefaults.init(suiteName: groupID);
    sharedDefaults?.synchronize();
    let str = sharedDefaults?.valueForKey("test")
    print(str);
    

最初に iPhone ターゲットを実行し、次に watch アプリを実行しました。ただし、watch アプリは、ユーザーの既定値から予期されるデータを読み取ることができません。

テスト プロジェクトも Github にアップロードしました。この問題について何か考えがあれば教えてください。

[ギットハブ]

https://github.com/mattcn/WatchOS_DataSharing

事前にご協力いただきありがとうございます。

4

2 に答える 2

0

Watch OS1 ではこれが機能しましたが、Watch OS2 ではいくつかの変更がありました。保存したいデータを時計に送信するには、WatchConnectivity と呼ばれるものを使用する必要があります。そのため、共有のユーザー デフォルトまたはアプリ グループを使用しても、その中に入れたデータはウォッチ上にあるため、iOS アプリからはアクセスできません。

ウォッチにデータを送信するには、WatchConnectivity フレームワークを使用できます。

于 2016-02-16T12:06:44.510 に答える
0

OS1 と OS2 の違いを取り上げてくれた Ashish に感謝します。

iOS 9 および WatchOS 2 の NSUserDefaults(suiteName:) - 動作しない?

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

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

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

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

于 2016-02-16T13:12:35.687 に答える