1

設定ウィンドウを作成しようとしています。
その中に、チェックボックス スタイルの NSButton がいくつかあります。setState:問題は、メソッドを呼び出したときに更新されないことです。when then window is initializedにアクセスしてstandarUserDefaults、ウィンドウが本来あるべき状態を取得し、そのキーの状態に応じてウィンドウを変更することを計画していました。

それを確認するためにいくつかの NSLog-ing を試したので、実際には IBOutlet と IBAction の両方に接続されていることがわかります。

プログラムでモデル プロパティの値を変更することは、ユーザー インターフェイスに反映されていませ

.h ファイルでチェックボタンを次のように宣言しました。

IBOutlet NSButton *defaultDateCheck;
IBOutlet NSButton *closeOnCreationCheck;
IBOutlet NSButton *allowEmptyNumberCheck;
IBOutlet NSPopUpButton *defaultJobSetting;

初期化メソッドは次のようになります。

-(id)initWithWindowNibName:(NSString *)windowNibName{

    self = [super initWithWindowNibName:windowNibName];

    if (self) {

        NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];

        [defaultDateCheck setState:[myDefaults boolForKey:@"useDefaultDate"]];

        [closeOnCreationCheck setState:[myDefaults boolForKey:@"closeOnCreation"]];

        [allowEmptyNumberCheck setState:[myDefaults boolForKey:@"allowEmptyProjectNumber"]];

        [defaultJobSetting selectItemAtIndex:[myDefaults integerForKey:@"defaultJob"]];
    }
    return self;
}

チェックボックスを設定するために次の形式も試しましたが、結果はありませんでした:

if ([myDefaults integerForKey:@"useDefaultDate"] == YES) {
    [defaultDateCheck setState:NSOnState];
}
else {
    [defaultDateCheck setState:NSOffState];
}

チェックボックスに接続された IBAction メソッドは次のようになります。

-(IBAction)toggleCloseOnCreation:(id)sender{
    [[NSUserDefaults standardUserDefaults] setBool:([closeOnCreationCheck state] == NSOnState) forKey:@"closeOnCreation"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
4

2 に答える 2

3

-initではビューとそのサブビューがまだ存在しないため、-viewDidLoadメソッドで状態を設定します

于 2012-04-04T16:09:30.533 に答える
1

デフォルト使用の値を設定する場合:

[myDefaults setObject:[NSNumber numberWithBool:YES] forKey:@"YourKey"];

値が true か false かを確認するには、次を使用します。

[[[NSUserDefaults standardUserDefaults] objectForKey:@"YourKey"] boolValue]
于 2012-04-05T08:28:29.050 に答える