告诉程序找不到保存数据时该怎么办 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的主要内容,如果未能解决你的问题,请参考以下文章