2014-09-20 13 views
14

Ben bir kopyası olabilir biliyorum ama benim ios projesinde uyarılar 6.: Örtülü dönüşüm xcode tamsayı hassasiyet kaybeder 6

İlk sürümüne xcode güncelledikten sonra yaklaşık 30 Örtülü Dönüşümün kaybeder Tamsayı hassasiyet var Örnek:

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

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

İkinci Örnek:

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

Uyarının ne anlama geldiğini biliyorum. NSInteger kullanımı bu uyarıdan kaçınmanıza yardımcı olabilir.

anlamıyorum

, xcode 5 hiçbir uyarı yoktu neden? i

hattı

int index = indexPath.row/2; 

değiştirdikten sonra herhangi bir uyarı yok yüzden

int index = indexPath.row/2i; 

cevap

20

NSArray countNSUInteger olduğunu.

NSIndexPath row, NSInteger'dir.

64 bit sistemlerde, NSUInteger ve NSInteger 64 bit'tir, ancak int 32-bittir. Böylece değer uyarıda bulunmaz, bu da uyarıyla sonuçlanır.

iOS'ta int'dan kaçınmak en iyisidir. Bunun yerine, uğraştığınız değerler ile aynı türü kullanın.

NSInteger index = indexPath.row/2; 

Varsayılan uyarılar nedeniyle bunları Xcode 6'da görüyorsunuz. Bunları Xcode 5'de doğru uyarı ayarları ile ve 64-bit için bina ile kolayca görebilirsiniz.

32

Sen projenin inşa ayarlarında No

için

Implicit Conversion to 32 Bit Type ayarlayarak, tüm

Implicit conversion loses integer precision uyarıları kaldırmak için, proje ayarlarını güncelleyebilirsiniz.

enter image description here

+0

Herkes için gitmek için bir yol olmamalı, ama ne yapması gerektiğini biliyorsan iyi bir ipucu! –

+1

, şu anda Unity ile çalışan herkes için gerçekten kullanışlı – Tomskiis

0

Hep bu uyarıları tarafından rahatsız oldu, bu yüzden bunu önlemek için basit çözüm geldi:

@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 

Basitçe bu kategoride yerine NSIndexPath satırındaki ve bölümünden rowIndex ve sectionIndex özelliklerini kullanmak özellikleri.