web-dev-qa-db-ja.com

警告:暗黙的な変換はxcode 6で整数の精度を失います

私はそれが重複している可能性があることを知っていますが、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'

2番目の例:

- (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;
17
dieter

NSArray countNSUIntegerです。

NSIndexPath rowNSIntegerです。

64ビットシステムでは、NSUIntegerおよびNSIntegerは64ビットですが、intは32ビットです。したがって、値は適合せず、警告が表示されます。

IOSではintを使用しないことをお勧めします。代わりに、処理する値と同じ型を使用してください。

NSInteger index = indexPath.row / 2;

デフォルトの警告のため、おそらくこれらはXcode 6で表示されます。これらは、適切な警告設定と64ビット用のビルドを使用して、Xcode 5で簡単に確認できます。

23
rmaddy

プロジェクト設定を更新して、すべて削除することができます

Implicit conversion loses integer precision警告、設定による

Implicit Conversion to 32 Bit TypeからNo

プロジェクトのビルド設定。

enter image description here

36

私はいつもこれらの警告に悩まされていたので、それを避けるための簡単な解決策を思いつきました:

@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

NSIndexPathの行とセクションのプロパティの代わりに、このカテゴリのrowIndexおよびsectionIndexプロパティを使用するだけです。

0
Matthes