4

デフォルトの設定値を登録する必要があります。これは、起動直後にインターフェイスで使用され、チェックボックスの状態などを設定するために使用されます。

アプリのデリゲートにデフォルトを登録します。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{ 
    NSLog(@"Did finish launching");
    NSDictionary *defaultPrefs = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:@"isEnabled"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
}

次に、MainMenu.xib ファイルを使用して作成されたオブジェクトで、既定値を使用します。

- (void)awakeFromNib
{
    NSLog(@"Awake from nib");
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [self.checkbox setState:([defaults boolForKey:@"isEnabled"] ? NSOnState : NSOffState)];
}

しかし、これらは間違った順序で呼び出されます!

> Awake from nib
> Did finish launching
// Preference == `nil` or `0`, not the default value I set.

したがって、使用したいときにデフォルトの設定が設定されていません。

registerDefaults:デフォルト設定を使用して .xib ファイル インターフェイス オブジェクトを設定できるようにするには、どこに行けばよいですか?

間違ったデリゲート メソッドを使用していませんか? applicationDidFinishLaunching/ awakeFromNib? 代替手段は何ですか?

4

2 に答える 2

3

私は通常、デフォルト+initializeが使用されるコントローラ オブジェクトのクラス メソッドにデフォルトを登録します。+initializeオブジェクトの存続期間中に呼び出される最も早いメソッドの 1 つであるため、できるだけ早く登録されることが保証されます。

+ (void)initialize {
     NSDictionary *defaultPrefs = [NSDictionary dictionaryWithObject:
                   [NSNumber numberWithBool:YES] forKey:@"isEnabled"];
     [[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
}
于 2013-03-21T20:06:28.040 に答える
1

initアプリのデリゲート クラスのメソッドにデフォルトを登録します。これにより、最初に登録されます。

于 2013-03-21T17:05:08.593 に答える