如何将整数值存储到目标c中的NSUserdefaults?

时间:2017-04-18 09:04:04

标签: objective-c

int ramdomnumber = arc4random_uniform(900000) + 100000;
[[NSUserDefaults standardUserDefaults] setObject:ramdomnumber forKey:@"contactno"];
[[NSUserDefaults standardUserDefaults] synchronize];

我尝试了上面的代码,但它显示了错误,如隐式转换' int'到' id_nullable'不允许使用ARC 。有人建议我如何在nsuserdefaults中存储int值。

3 个答案:

答案 0 :(得分:2)

发生错误的原因是您将标量类型传递给需要对象的方法。

有一种专用方法,将值转换为预期类型是一种很好的编程习惯;

NSInteger ramdomnumber = (NSInteger)(arc4random_uniform(900000) + 100000);
[[NSUserDefaults standardUserDefaults] setInteger:ramdomnumber forKey:@"contactno"];
// [[NSUserDefaults standardUserDefaults] synchronize];

synchronize不需要。

答案 1 :(得分:2)

这里的问题是int不是Object,你应该做的是:

int ramdomnumber = arc4random_uniform(900000) + 100000;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:ramdomnumber] forKey:@"contactno"];
[[NSUserDefaults standardUserDefaults] synchronize];

答案 2 :(得分:0)

你可以使用NSNumber来存储整数值,例如

int ramdomnumber = arc4random_uniform(900000) + 100000;
 NSNumber *randomNo = [NSNumber numberWithInt: ramdomnumber]; 
[[NSUserDefaults standardUserDefaults] setObject: randomNo forKey:@"contactno"]; //save NSNumber instance not the int 
[[NSUserDefaults standardUserDefaults] synchronize];

以同样的方式返回整数,

NSNumber *savedNo = [[NSUserDefaults standardUserDefaults] objectForKey:@"contactno"];
int ramdomnumber = savedNo.intValue;//[savedNo intValue];