私はそれが重複している可能性があることを知っていますが、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;
NSArray count
はNSUInteger
です。
NSIndexPath row
はNSInteger
です。
64ビットシステムでは、NSUInteger
およびNSInteger
は64ビットですが、int
は32ビットです。したがって、値は適合せず、警告が表示されます。
IOSではint
を使用しないことをお勧めします。代わりに、処理する値と同じ型を使用してください。
NSInteger index = indexPath.row / 2;
デフォルトの警告のため、おそらくこれらはXcode 6で表示されます。これらは、適切な警告設定と64ビット用のビルドを使用して、Xcode 5で簡単に確認できます。
プロジェクト設定を更新して、すべて削除することができます
Implicit conversion loses integer precision
警告、設定による
Implicit Conversion to 32 Bit Type
からNo
プロジェクトのビルド設定。
私はいつもこれらの警告に悩まされていたので、それを避けるための簡単な解決策を思いつきました:
@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
プロパティを使用するだけです。