2017-04-18 79 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]; 
相關問題