2014-09-20 12 views
14

Ich weiß, es ist ein Duplikat sein könnte, aber ich habe etwa 30 Implizite Konvertierung verliert Integer Präzision Warnungen in meinem ios Projekt nach Xcode auf Version 6.Warnung: Implizite Konvertierung verliert Integer Präzision in Xcode 6

Erste Aktualisierung Beispiel:

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

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

Zweites Beispiel:

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

Ich weiß was die Warnung bedeutet. Die Verwendung von NSInteger kann helfen, diese Warnung zu vermeiden.

Ich verstehe nicht, warum keine Warnungen in Xcode gibt es 5? Und warum nicht es gibt Warnung, nachdem ich die Zeile

int index = indexPath.row/2; 

zu

int index = indexPath.row/2i; 

Antwort

20

NSArray count ist NSUInteger.

ist NSInteger.

Auf 64-Bit-Systemen sind NSUInteger und NSInteger 64-Bit, aber int ist 32-Bit. Der Wert passt also nicht in die Warnung.

Am besten vermeiden Sie int in iOS. Verwenden Sie stattdessen denselben Typ wie die Werte, mit denen Sie arbeiten.

Sie sehen diese wahrscheinlich in Xcode 6 aufgrund der Standardwarnungen. Sie können diese in Xcode 5 mit den richtigen Warneinstellungen und dem Aufbau für 64-Bit leicht sehen.

32

können Sie Projekteinstellungen aktualisieren, alle

Implicit conversion loses integer precision Warnungen zu entfernen, durch

Implicit Conversion to 32 Bit Type zu No

in Projektbuildeinstellungen speichern.

enter image description here

+0

Sollte nicht der richtige Weg für alle sein, aber wenn Sie wissen, was es zu tun ist, ist es ein netter Hinweis! –

+1

wirklich praktisch für jeden, der gerade mit Unity arbeitet – Tomskiis

0

Ich war durch diese Warnungen immer gestört, so kam ich mit einem einfachen Lösung, um es zu vermeiden:

@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 

Einfach rowIndex und sectionIndex Eigenschaften dieser Kategorie anstelle von NSIndexPath der Zeile und Abschnitt Eigenschaften.

Verwandte Themen