0

我正在更新我的一个旧项目。我进展顺利,一切顺利。

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

突然,当我今天开始这个项目时,没有按一个键,我一下子收到了 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 位),所有警告都消失了。

现在的问题是,如何使其兼容两种设备?

4

2 回答 2

2

64 位警告。

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

你可能更新了你的 xcode。当您针对 iphone 5s 或 ipad air (x86_64) 进行编译时,最新版本打开了很多警告

于 2014-04-01T07:26:04.753 回答
2

不要使用原始 C 类型int/unsigned,而是使用 Objective-C 类型,如NSInteger/NSUInteger.

这些警告将随着类型大小的变化而消失,具体取决于架构。

当您使用类似 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);
于 2014-04-01T07:27:07.550 回答