这是我的代码:
CategoryLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"CategorySaved"];
这是错误:
"Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'
如何解决此问题?
答案 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:
。