25

Apple Watch 用のテスト アプリを作成したいと考えていました。このアプリでは、電話に String を設定すると、Apple Watch に表示されます。このデータを格納するために 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 として表示され、ラベルが更新されていない場合を除きます。

4

2 に答える 2

31

+standardUserDefaultsNSUserDefaults現在のプロセスの情報のみを保存するオブジェクトを返します。

NSUserDefaultsiOS アプリとその拡張機能の 1 つとの間でデータを共有するオブジェクトを作成する場合は、アプリ グループ コンテナーを設定し、それを情報共有の基礎として使用する必要があります。

リンクされたドキュメントから:

アプリ グループを有効にすると、アプリ拡張機能とそれに含まれるアプリの両方が NSUserDefaults API を使用して、ユーザー設定へのアクセスを共有できます。この共有を有効にするには、initWithSuiteName: メソッドを使用して新しい NSUserDefaults オブジェクトをインスタンス化し、共有グループの識別子を渡します。たとえば、共有拡張機能は、次のようなコードを使用して、ユーザーが最近使用した共有アカウントを更新する場合があります。

// 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 では、共有グループ コンテナーを使用できなくなりました。

于 2014-11-19T01:24:12.783 に答える