告诉程序找不到保存数据时该怎么办 NSUserDefaults, iPhone

Posted

技术标签:

【中文标题】告诉程序找不到保存数据时该怎么办 NSUserDefaults, iPhone【英文标题】:Tell The Program What To Do When No Save Data Is Found NSUserDefaults, iPhone 【发布时间】:2010-04-01 20:45:04 【问题描述】:

我保存了使用 NSUserDefaults 保存的数据。我的印象是,如果没有任何内容保存到密钥中(第一次运行应用程序),它将默认为 0。但似乎并非如此。

这是我所拥有的:

保存:

- (void)viewWillDisappear:(BOOL)animated

[[NSUserDefaults standardUserDefaults] setInteger:setbatteryHealthCalculated     forKey:@"healthValue"];

    [[NSUserDefaults standardUserDefaults] synchronize];


加载:

- (void) viewWillAppear:(BOOL)animated

NSInteger setbatteryHealthCalculated = [[NSUserDefaults standardUserDefaults]     integerForKey:@"healthValue"];

检查保存值:

- (IBAction)check

    NSInteger setbatteryHealthCalculated = [[NSUserDefaults standardUserDefaults] integerForKey:@"healthValue"];


    if  (setbatteryHealthCalculated = 0) 

                [self performSelector:@selector(displayAlert) withObject:nil];



【问题讨论】:

【参考方案1】:
if  (setbatteryHealthCalculated = 0) 

嗯。应该是

if  (setbatteryHealthCalculated == 0)

比较运算符是==,而不是类C语言中的=

无论如何,原始代码都会将setbatteryHealthCalculated 设置为0。由于 0 为 false,if 分支将永远不会被执行,也不会显示任何警报。

另外,原始代码有不平衡的大括号。


顺便说一句,setbatteryHealthCalculated 是 ivar 吗?如果是,请删除它之前的 NSInteger。否则,您将声明一个隐藏 ivar 的局部变量。

【讨论】:

【参考方案2】:

在您的应用启动期间调用registerDefaults: 为您的默认设置设置默认值(说起来很尴尬,但这就是它的工作原理)。您需要在任何访问您的默认值的代码之前调用它。但是对于不存在的键,NSUserDefaults 确实返回 0 或 nil。

【讨论】:

以上是关于告诉程序找不到保存数据时该怎么办 NSUserDefaults, iPhone的主要内容,如果未能解决你的问题,请参考以下文章

将值保存到 UserDefaults [重复]

当我收到本地文件的 CORS 错误时该怎么办? [复制]

Google BigQuery:将查询结果保存到表时找不到数据集

cpp文件找不到,求高手

在发送电子邮件进行注册过程中出现异常时该怎么办

Mac pro 找不到zshrc文件