【问题标题】:Xcode warning about precision [duplicate]Xcode关于精度的警告[重复]
【发布时间】:2014-06-19 21:03:09
【问题描述】:

这是我的代码:

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

这是错误:

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

我该如何解决这个问题?

【问题讨论】:

  • 请出示CategoryLoaded的声明。
  • (a) 这是警告而不是错误,(b) 警告会告诉您您需要知道的一切。

标签: objective-c


【解决方案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 位,这意味着您将 long 分配给显然是 int 的内容。

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

NSInteger CategoryLoaded;

...或者使用 c 风格的演员表说“闭嘴我知道我在做什么”:

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

【讨论】:

    【解决方案2】:

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

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

    另一种是使用+numberWithInt: 将号码存储为NSNumber,并使用-objectForKey: 而不是-integerForKey:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2013-11-03
      • 2023-03-20
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多