24798


iOSアプリ側 [ViewController.swift]

[code]

    override func viewDidLoad() {
            super.viewDidLoad()
    
    let udForWatch = NSUserDefaults(suiteName: SuiteName)!
            let ary = ["テスト","テスト"]
    
            udForWatch.setObject(ary, forKey: "ary")
    }
    
[/code]

Watch Extension側 [InterfaceController.swift]

[code]

    class InterfaceController: WKInterfaceController {
    
    
            override func awakeWithContext(context: AnyObject?) {
                super.awakeWithContext(context)
    
                let ud = NSUserDefaults(suiteName: SuiteName)!
                print(ud.objectForKey("ary")) //nilになる。
    
            }
        }
    
[/code]

としているのですが、Watch Extension側のデータがnilになってしまいます。  
何がおかしいのでしょうか？


CC BY-SA 3.0
2016-03-18T18:18:23.100
23266
2016-05-12T12:33:07.223
2016-03-19T03:55:40.770
12297
12297
question
swift
watchOS2で、Watch Extension側に、iOSアプリ側からNSUserDefaults経由で、データが渡ってこない。


watchOS2ではWatchConnectivityを使用する必要があります。上記のコードはいわゆるwatchOS1でしか使うことができません。

こちらでその原因が述べられていますが、watchOS1ではiPhoneでExtensionが動作していましたが、watchOS2からはApple
Watchで動作するようになったためです。  
<http://qiita.com/koogawa/items/432b9c65035b6ba17c8b#3-app-
groups%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%85%B1%E6%9C%89%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C>

iPhone内に保存したUserDefaultsのデータはWatchConnectivityフレームワークの`sendMessage`など、用途に応じて適切な方法で送信する必要があります。  
<http://qiita.com/koogawa/items/b39e1419cbbcda8efc07>


CC BY-SA 3.0
2016-05-12T12:33:07.223
24798
2016-05-12T12:33:07.223
10926
23266
answer