Apple時計用のテストアプリを作成し、携帯電話で文字列を設定すると、Apple時計に表示されます。NSUserDefaultsクラスを使用してこのデータを保存することにしました。
IPhone用のビューコントローラーには、入力を取得してローカルストレージに格納するメソッドがあります。
- (IBAction)saveInfo:(id)sender {
NSString *userInput = [myTextField text];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:userInput forKey:@"savedUserInput"];
[defaults synchronize];
self.myLabel.text = [defaults stringForKey:@"savedUserInput"];
}
そして、私の時計インターフェイスコントローラーには、データを取得して表示するメソッドがあります。
- (IBAction)showText2 {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
self.myLabel2.text = [defaults stringForKey:@"savedUserInput"];
}
何らかの理由を除いて、取得しようとしているデータがnullとして表示され、ラベルが更新されていません。
+standardUserDefaults
は、現在のプロセスの情報のみを保存するNSUserDefaults
オブジェクトを返します。
IOSアプリとその拡張機能の1つとの間でデータを共有するNSUserDefaults
オブジェクトを作成する場合は、 アプリグループコンテナーを設定する を使用し、それを情報を共有するための基礎。
リンクされたドキュメントから:
アプリグループを有効にすると、アプリ拡張機能とそれを含むアプリの両方がNSUserDefaults APIを使用してユーザー設定へのアクセスを共有できます。この共有を有効にするには、initWithSuiteName:メソッドを使用して新しいNSUserDefaultsオブジェクトをインスタンス化し、共有グループの識別子を渡します。たとえば、Share拡張機能は、次のようなコードを使用して、ユーザーの最近使用した共有アカウントを更新します。
// Create and share access to an NSUserDefaults object. NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.domain.MyShareExtension"]; // Use the shared user defaults object to update the user's account. [mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];
注:Watch OS2では、共有グループコンテナーを使用できなくなりました。
[〜#〜]重要[〜#〜]
Watch OS2では、共有グループコンテナーを使用できなくなりました。このスタックオーバーフロー answer を使用する必要があります。
「OS2の場合-WatchConnectivityフレームワークを使用し、WCSessionDelegateを実装する必要があります。」