0

現在、NSUserDefaults に保存される色を追跡するカラー ウェルがあります。NSUserDefaultsController にバインドされています。ただし、それに応じてビューを更新できるように、色の変更もリッスンしたいと考えています。そのため、バインディングに加えて、色で通知を送信する設定コントローラーに、色のウェルへのターゲット/アクションを追加しました。

1) ターゲット/アクションとバインディングの両方を持つことはどのくらい安全ですか? 遅れたり、同期がずれて異なる値を報告したりする可能性はありますか?

2) IBAction メソッドで色を取得する場合、ユーザーのデフォルトまたはカラー ウェルから取得する必要がありますか?

これが私の colorChanged: アクションです:

- (IBAction)colorChanged:(id)sender
{
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[colorWell color] forKey:@"color"];
[notificationCenter postNotificationName:@"ColorChangedNotification" object:self userInfo:userInfo];
}

だから私はこれを行う必要があります:

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"color"]];

また:

[colorWell color];

ありがとう!

4

2 に答える 2

3

1) ターゲット/アクションとバインディングの両方を持つことはどのくらい安全ですか? 遅れたり、同期がずれて異なる値を報告したりする可能性はありますか?

ほとんどの場合、それで問題ないと思います。確認する最善の方法は、テストすることです。

2) IBAction メソッドで色を取得する場合、ユーザーのデフォルトまたはカラー ウェルから取得する必要がありますか?

あなたは間違いなく、間違いなくカラーウェルから直接取得する必要があります. なんで?ユーザーのデフォルトに保存するときに遅延が発生する可能性があります。デフォルトでは、アプリケーションが終了する直前に一度だけ保存することもできますが、それでも問題ありません。(OK、これは完全に真実ではありませんが、それでも) デフォルトの主な目的は、アプリの存続期間中ではなく、アプリケーションの起動間でデータを保持することです。

于 2010-02-06T05:26:34.400 に答える
1

ターゲット/アクションとバインディングの両方を使用しても安全です。NSNotificationCenter を使用して通知を投稿すると、通知は同期的にオブザーバーに配信されます。(これは魔法ではないという明らかな警告があります。オブザーバー A が通知を受け取ったときにオブザーバー B にメッセージを送信した場合、オブザーバー B はまだ通知を受け取っていません。複数のスレッドがさらに複雑さを加えます。) NSNotificationCenter のドキュメント。

カラー ウェルから直接色を読み取るのは高速であり、おそらく IBAction からは問題ありません。アプリケーションの起動時にコードを実行している場合は、カラー ウェルのバインディングがまだ更新されていない可能性があるため、ユーザーの既定値から読み取るのが最適です。

于 2010-02-06T01:54:51.013 に答える