2017-04-18 82 views
0
int ramdomnumber = arc4random_uniform(900000) + 100000; 
[[NSUserDefaults standardUserDefaults] setObject:ramdomnumber forKey:@"contactno"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

我想上面的代码,但它显示与ARC不允许的。可有人建议我如何存储在该NSUserDefaults的int值一样“诠释”到“id_nullable”的隐式转换的错误。如何将整数值存储到目标c中的NSUserdefaults?

+0

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

回答

0

u可以使用的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]; 
2

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

有一个专门的方法,它是良好的编程习惯,将值转换为预期的类型;

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

synchronize是不需要的。

+0

非常感谢你,先生,我知道了 – pavithra

+0

[我认为需要同步...](http://stackoverflow.com/a/9647965/1066828)更好地用于安全方面 –

+0

@FahimParkar你有没有也请阅读引用文档的答案。它揭示了它仅在少数情况下才需要。 – vadian

2

这里的问题是,int是不是一个对象,你应该做的是:

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