NSUserDefaults问题

时间:2010-09-21 11:20:30

标签: iphone nsuserdefaults

我在我的app delegate applicationDidFinishLaunching方法中有这个:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"AcceptTC"] == nil){
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AcceptTC"];
    [defaults registerDefaults:appDefaults];
}

我在RootViewController viewDidLoad方法中有这个:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(![defaults boolForKey:@"AcceptTC"]){
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notice" message:@"By using this application you agree to be bound by the Terms and Conditions as stated within this application." delegate:self cancelButtonTitle:@"No Deal" otherButtonTitles:@"I Understand",nil];
    [alert show];
    [alert release];
}

我的警报视图委托执行此操作:

if(buttonIndex == 0){
            exit(0);
        }
        else{
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:@"YES" forKey:@"AcceptTC"];
        }

然而,当我点击“我理解”(按钮索引1)然后重新启动应用程序时,我仍然会看到警报视图!即使我确定将值设置为YES。

我不知道如何改变这一点。 :(我只希望它在用户第一次启动应用程序时显示 - 我不想在每次想要使用它时继续显示它。

由于

3 个答案:

答案 0 :(得分:7)

在我的应用程序中,我使用带有bool的NSUserDefaults,工作正常。

当第一个ViewController加载时,它将执行:

BOOL terms = [[NSUserDefaults standardUserDefaults] boolForKey:@"termsaccepted"];

if (!terms) {
   [self presentModalViewController:disclaimerViewController animated:YES];
}

在免责声明视图中,点击按钮后:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"termsaccepted"];
[[NSUserDefaults standardUserDefaults] synchronize];

我认为你错过了“同步”部分。但是我发现使用bool也更精简了。

答案 1 :(得分:4)

也许您需要在默认值上调用synchronize以将更改保存到磁盘?

答案 2 :(得分:2)

Concering registerDefaults

  

注册域名的内容未写入磁盘;每次应用程序启动时都需要调用此方法。您可以将plist文件放在应用程序的Resources目录中,并使用从该文件中读取的内容调用registerDefaults:。

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary \
    dictionaryWithContentsOfFile:[[NSBundle mainBundle] \ 
    pathForResource:@"Defaults" ofType:@"plist"]]];

代码取自this SO answer

关于NSDefaults的另一篇博客文章: