Ios NSNotFound无法使用NSUser默认值
由于我正在将一个整数值存储到Ios NSNotFound无法使用NSUser默认值,ios,objective-c,nsuserdefaults,Ios,Objective C,Nsuserdefaults,由于我正在将一个整数值存储到NSUserDefaultsaas中,因此在许多地方都会用到它。第一次它工作正常,但当我关闭应用程序并再次打开它时,我检查用户是否已经在过去的feomNSUserDefaults存储值中选择了任何选项,但我失败了 我的情况有些不对劲 下面是我的代码,用于检查用户默认值中是否存在整数值: NSInteger selectedBusinessUnit = [[NSUserDefaults standardUserDefaults] integerForKey:@"sele
NSUserDefaults
aas中,因此在许多地方都会用到它。第一次它工作正常,但当我关闭应用程序并再次打开它时,我检查用户是否已经在过去的feomNSUserDefaults
存储值中选择了任何选项,但我失败了
我的情况有些不对劲
下面是我的代码,用于检查用户默认值中是否存在整数值:
NSInteger selectedBusinessUnit = [[NSUserDefaults standardUserDefaults] integerForKey:@"selectedUnit"];
if ( selectedBusinessUnit != NSNotFound){
//go to direct main screen.
}else {
// load Business unit screen for selection.
}
但即使我删除并重新安装应用程序,它也总是有价值的
我选择的值始终为0
让我知道我犯了什么愚蠢的错误
编辑:
[[NSUserDefaults standardUserDefaults] setInteger:sender.tag forKey:@"selectedUnit"];
[[NSUserDefaults standardUserDefaults] synchronize];
THNAKS.根据文档,整数的默认值为0: -IntegerWorkey:等效于-objectForKey:,只是它将返回值转换为NSInteger。如果该值为 NSNumber,将返回-integerValue的结果。如果值 是NSString,如果可能,将转换为NSInteger。如果 值是一个布尔值,它将被转换为1(是)或0(是) 否。如果该值不存在或无法转换为整数,则将0 被退回 如果要检查NSUserDefaults中是否存在密钥,请使用:
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"selectedUnit"] != nil)
{
...
}
根据文档,integer的默认值为0: -IntegerWorkey:等效于-objectForKey:,只是它将返回值转换为NSInteger。如果该值为 NSNumber,将返回-integerValue的结果。如果值 是NSString,如果可能,将转换为NSInteger。如果 值是一个布尔值,它将被转换为1(是)或0(是) 否。如果该值不存在或无法转换为整数,则将0 被退回 如果要检查NSUserDefaults中是否存在密钥,请使用:
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 *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@(yourIntegerValue) forKey:@"yourIntegerKey"];
[userDefaults synchronize];
你可以这样检查
NSNumber *integerValue = [userDefaults objectForKey:@"yourIntegerKey"];
if (integerValue) {
//
}
NSUserDefaults
仅存储对象,NSNumbers
。
我认为从NSNumber
转换的问题在于,您在方法integerworkey
中将其存储为整数
另一种情况-可能是您忘记了同步
nsserdefaults
nsserdefaults
仅存储对象,NSNumbers
。
我认为从NSNumber
转换的问题在于,您在方法integerworkey
中将其存储为整数
另一种情况-可能是您忘记了同步
NSUserDefaults
显然存在误解:NSNotFound
不等于缺少键,它是一个有效的整数值
保持逻辑的最简单方法是使用NSNotFound
将键值对注册为默认值
尽快(ApplicationIDFinishLaunching
或更早)编写
这意味着NSNotFound
将被视为默认值,直到它第一次被覆盖。每次启动应用程序时都必须执行这3行。如果重新安装应用程序,则会再次使用默认值
现在你可以用你的逻辑来回答这个问题了
PS:您不需要在编写后进行
同步
。框架会定期这样做。显然存在误解:NSNotFound
不等于key,它是一个有效的整数值
保持逻辑的最简单方法是使用NSNotFound
将键值对注册为默认值
尽快(ApplicationIDFinishLaunching
或更早)编写
这意味着NSNotFound
将被视为默认值,直到它第一次被覆盖。每次启动应用程序时都必须执行这3行。如果重新安装应用程序,则会再次使用默认值
现在你可以用你的逻辑来回答这个问题了
PS:您不需要在编写后进行
同步
。框架会定期这样做。但是我的值是整数而不是对象的形式,因此它也可以与IntergerWorkey一起使用吗?您可以尝试将其保存为NSNumber而不是NSInteger,然后在生成的对象上使用intValue,只需这样保存:setObject:@(整数)它会给你一个更好的结果。我知道我可以用NSNumber代替integer,但我的问题是有没有办法检查integer是否有值,就像NSNotFound使用integer value一样。NSNotFound最终是一个整数,你的问题是默认整数值是0而不是NSNotFound,即使您使用整数作为NSUserDefaults的输入值,您仍然可以使用objectForKey检查它是否存在,如果存在,将返回NSNumber,否则返回nilBut我的值是整数而不是Object的形式,因此它是否也可以与IntergerWorkey一起使用??您可以尝试将其保存为NSNumber而不是NSInteger,然后在结果对象上使用intValue,只需按如下方式保存:setObject:@(integer),它将为您提供更好的结果。我知道我可以在integer上使用NSNumber,但我的问题是,是否有任何方法可以检查integer是否具有值。NSNotFound最终是一个整数,您的问题是默认整数值为0且未找到NSNotFound,即使您使用整数作为NSUserDefaults的输入值,您仍然可以使用objectForKey检查它是否存在,如果存在,将返回NSNumber,否则,我们如何直接存储整数,因为您正在设置对象并传递整数,这将不起作用。NSUserDefaults
具有专用的setInteger:forKey
和IntegerWorkey:
方法。无需使用对象
。您可以将整数设置为对象,如@(整数)或[NSNumber numberWithInt:0]或[NSNumber numberWithInteger:0]当然,我知道,我们可以将整数设置为nsu