关于精度的Xcode警告

时间:2014-06-19 21:03:10

标签: objective-c

这是我的代码:

CategoryLoaded =  [[NSUserDefaults standardUserDefaults] integerForKey:@"CategorySaved"];

这是错误:

"Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

从SDK标题:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

所以你看,NSInteger,你从integerForKey:获得的返回类型可以是int或long,它们的大小不同。你最有可能建立了64位,这意味着你将长期分配给显然是一个整数。

所以要么将CategoryLoaded的类型改为足够大:

NSInteger CategoryLoaded;

...或者使用一个c风格的演员表示"闭嘴我知道我在做什么":

CategoryLoaded = (int)[[NSUserDefaults standardUserDefaults] integerForKey:@"CategorySaved"];

答案 1 :(得分:0)

  

Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'

解决此问题的一种方法是将CategoryLoaded声明为NSInteger而不是int

另一种方法是使用NSNumber将号码存储为+numberWithInt:并使用-objectForKey:代替-integerForKey: