警告:隐式转换在xcode 6中丢失整数精度

时间:2014-09-20 23:16:11

标签: ios objective-c xcode warnings

我知道它可能是重复的,但是在将xcode更新为版本6之后,我的ios项目中有大约30个隐式转换失去了整数精度警告。

第一个例子:

NSArray * stations = [self stationsJSON][KEY_ITEM_LIST];

int newSize = (stations.count + 1); // Implicit conversion loses Integer precision: 'unsigned long' to 'int'

第二个例子:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    int index = indexPath.row / 2; // Implicit conversion loses Integer precision: 'long' to 'int'
    ...
}

我知道警告意味着什么。使用NSInteger可以帮助避免此警告。

我不明白,为什么xcode 5中没有警告?为什么我改变线后没有警告

int index = indexPath.row / 2;

int index = indexPath.row / 2i;

3 个答案:

答案 0 :(得分:35)

您可以更新项目设置,删除所有

Implicit conversion loses integer precision警告,通过设置

Implicit Conversion to 32 Bit TypeNo

在项目的构建设置中。

enter image description here

答案 1 :(得分:22)

NSArray countNSUInteger

NSIndexPath rowNSInteger

在64位系统上,NSUIntegerNSInteger为64位,int为32位。因此,该值不适合导致警告的结果。

最好避免使用iOS中的int。而是使用与您正在处理的值相同的类型。

NSInteger index = indexPath.row / 2;

由于默认警告,您可能会在Xcode 6中看到这些内容。您可以使用正确的警告设置在Xcode 5中轻松查看这些内容并构建为64位。

答案 2 :(得分:0)

我总是对这些警告感到恼火,所以我想出了一个简单的解决方案来避免它:

@interface NSIndexPath(UnsignedIndex)

@property (nonatomic, readonly) NSUInteger sectionIndex;
@property (nonatomic, readonly) NSUInteger rowIndex;

@end

@implementation NSIndexPath(UnsignedIndex)

- (NSUInteger)sectionIndex {

    return (NSUInteger)self.section;
}

- (NSUInteger)rowIndex {

    return (NSUInteger)self.row;
}

@end

只需使用此类别中的rowIndexsectionIndex属性,而不是NSIndexPath的行和部分属性。