gpt4 book ai didi

ios - 我什么时候应该调用 [NSUserDefaults standardUserDefaults] registerDefaults :] to ensure that . xib 文件可以立即访问首选项?

转载 作者:可可西里 更新时间:2023-11-01 05:41:39 26 4
gpt4 key购买 nike

我需要注册默认首选项值,然后界面在启动时立即使用这些值来设置复选框状态等。

我在应用委托(delegate)中注册了默认值:

- (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: 以便可以使用默认 prefs 来设置 .xib 文件接口(interface)对象?

我是否使用了错误的委托(delegate)方法? applicationDidFinishLaunching/awakeFromNib ?有哪些替代方案?

最佳答案

我通常在 +initialize 中注册默认值将在其中使用它们的 Controller 对象的类方法。 +initialize 是对象生命周期中最早调用的方法之一,因此它确保它们尽早注册。

+ (void)initialize {
NSDictionary *defaultPrefs = [NSDictionary dictionaryWithObject:
[NSNumber numberWithBool:YES] forKey:@"isEnabled"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
}

关于ios - 我什么时候应该调用 [NSUserDefaults standardUserDefaults] registerDefaults :] to ensure that . xib 文件可以立即访问首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15553659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com