有关NSUInteger的警告超过23次

时间:2014-04-01 07:20:03

标签: xcode ios7 compiler-warnings nsuinteger

我正在更新我的旧项目。我做得很好,一切顺利。

昨天当我完成工作时,我的项目一切正常,没有错误,没有警告。

突然间,今天我开始这个项目而没有按一个键,我立刻得到了23个警告。所有这些都是:

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

有人经历过类似的事吗?昨天到底为什么一切都好,今天我有混乱?

修改即可。这是一些例子:

- (IBAction)previousText:(UIBarButtonItem *)sender {


    int i=[self.indexPathArray indexOfObject:[self indexPathForActiveText]];

    if (i>0) {

        [self moveRows:i-1];


    }

}

编辑事实证明(我不知道为什么)我使用的模拟器是iPhone视网膜(64位)。我改回iPhone 3.5英寸(32位)并且所有警告都消失了。

现在问题是,如何让它兼容两种设备?

2 个答案:

答案 0 :(得分:2)

64位警告。

NSInteger i=[self.indexPathArray indexOfObject:[self indexPathForActiveText]];

你可能已经更新了你的xcode。当您编译iphone 5s或ipad air(x86_64)时,最新的警告会发出很多警告

答案 1 :(得分:2)

不要使用像int/unsigned这样的原始C类型,而是使用像NSInteger/NSUInteger这样的Objective-C类型。

随着类型大小的改变,这些警告将消失。

当您使用类似printf的函数时,事情变得更有趣,因为您需要有条件地编译格式化字符串,具体取决于体系结构;例如:

NSInteger i = 1;
#if __LP64__
NSLog(@"i is %ld", i);
#else
NSLog(@"i is %d", i);
#endif

然而,更好(当格式化语句非常重要时):

NSInteger i = 1;
NSLog(@"i is %ld", (long)i);