NSNotFound不能与NSUser一起使用默认
因为我在一个Integer值中存储一个Integer值到NSUserDefaults
,在很多地方使用它。在第一次的工作正常,但同时我关闭我的应用程序,然后再次打开它,我检查已经选择在过去feom NSUserDefaults
储值的任何选项,用户,但我没在NSNotFound不能与NSUser一起使用默认
有些事情是错误的,我的情况下
这里是我的检查整数值的代码是在有userdefault:
NSInteger selectedBusinessUnit = [[NSUserDefaults standardUserDefaults] integerForKey:@"selectedUnit"];
if (selectedBusinessUnit != NSNotFound){
//go to direct main screen.
}else {
// load Business unit screen for selection.
}
但它总能找到价值,即使我正在删除应用程序,并reinastall它。
总是我的选定值是。
让我知道这里我的愚蠢的错误是什么。
编辑:
[[NSUserDefaults standardUserDefaults] setInteger:sender.tag forKey:@"selectedUnit"];
[[NSUserDefaults standardUserDefaults] synchronize];
THNAKS。
显然有一个误区:NSNotFound
不等于密钥丢失,这是一个有效的整数值。
保持逻辑的最简单方法是将键值对与NSNotFound
一起注册为默认值。
尽快(applicationDidFinishLaunching
或更早)写
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *defaultValues = @{@"selectedUnit": @(NSNotFound)};
[defaults registerDefaults:defaultValues];
这意味着NSNotFound
被视为默认值,直到它覆盖的第一次。每次启动应用程序时,必须执行3行。如果应用程序重新安装,则再次采用默认值。
现在你可以在问题中使用你的逻辑。注:写完后你不需要synchronize
。该框架定期进行。
为整数。缺省值是0,根据文档:
如果要检查是否有键NSUserDefaults的存在-integerForKey:相当于-objectForKey :,不同之处在于它转换返回的值到一个NSInteger。如果值为 NSNumber,则会返回-integerValue的结果。如果值 是一个NSString,则它将在可能的情况下转换为NSInteger。如果 的值是一个布尔值,则它将被转换为1或YES,如果是 NO。如果该值不存在或无法转换为整数,则返回0将返回 。
使用:
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"selectedUnit"] != nil)
{
...
}
您可以设置对象像
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@(yourIntegerValue) forKey:@"yourIntegerKey"];
[userDefaults synchronize];
,你可以检查这样
NSNumber *integerValue = [userDefaults objectForKey:@"yourIntegerKey"];
if (integerValue) {
//
}
NSUserDefaults
存储唯一对象,NSNumbers
。 我认为在NSNumber
转换的问题,你存储为方法integerForKey
整数。
另一种情况 - 可能你忘了同步NSUserDefaults
。
朋友你可以显示你的setInteger:forKey代码? –
我相信你在设定价值时做错了什么。 –
请考虑'NSNotFound'是一个有效的整数值。这不等于'nil'或*键丢失*。正如答案中所述,如果密钥丢失,'integerForKey'返回0。根本不同的标签分配给'sender'(默认也是0)? – vadian