メインメニュー(MainMenu.xib)に「ワードラップ」というタイトルのNSMenuItemがあります。その値は、XIBでもインスタンス化されている、共有ユーザーのデフォルトコントローラーにバインドされています。また、選択すると次のアクションが送信されます。
- (IBAction)toggleWordWrap:(id)sender {
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
if ([[[ctrlr values] valueForKey:@"wordWrapIsEnabled"] boolValue]) {
// turn on word wrap
} else {
// turn off word wrap
}
}
アプリデリゲートの+initialize
メソッドでは、標準ユーザーのデフォルトにデフォルト値を入力します。
+ (void)initializeDefaults {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"wordWrapIsEnabled",
// etc.
nil];
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
[ctrlr setInitialValues:defaults];
}
私の問題は、NSMenuItemの状態がユーザーのデフォルトと同期していないことです。何が起こるかのタイムラインは次のとおりです。
アプリの起動:
- ワードラップメニュー項目がチェックされていません
wordWrapIsEnabled
いいえです- ワードラップはオフです
ワードラップが初めて選択されたとき:
- チェックされたワードラップメニュー項目
wordWrapIsEnabled
NO (BZZZT WRONG)- ワードラップがオフです(BZZZT WRONG)
2回目のワードラップが選択された場合:
- ワードラップメニュー項目がチェックされていません
wordWrapIsEnabled
はいです(BZZZTが間違っています)- ワードラップがオンになっています(BZZZTが間違っています)
フリップフロップ広告を無限に繰り返します。
プロジェクトににアクセスするものが他にないことを確認しましたwordWrapIsEnabled
。セレクターの呼び出しとwordWrapIsEnabled
バインディングを介したの設定の間に競合状態が発生する可能性はありますか?バインドされた値が最初に設定されると想定してきました。