2014-09-20 6 views
14

मैं इसे एक नकली हो सकता है पता है, लेकिन मैं अपने ios परियोजना में चेतावनी संस्करण के लिए xcode अद्यतन करने 6.चेतावनी: अंतर्निहित रूपांतरण xcode में पूर्णांक परिशुद्धता खो देता है 6

पहले के बाद के बारे में 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' 
    ... 
} 

मुझे पता है कि चेतावनी का क्या अर्थ है। एनएसआईएनटेगर का उपयोग करके इस चेतावनी से बचने में मदद मिल सकती है।

मुझे समझ नहीं आता, क्यों xcode 5 में कोई चेतावनी थी? और क्यों कोई चेतावनी है के बाद मैं

करने के लिए लाइन

int index = indexPath.row/2; 

बदलने

int index = indexPath.row/2i; 

उत्तर

20

NSArray countNSUInteger है।

NSIndexPath rowNSInteger है।

64-बिट सिस्टम पर, NSUInteger और NSInteger 64-बिट्स हैं लेकिन int 32-बिट है। इसलिए मूल्य फिट नहीं होगा जिसके परिणामस्वरूप चेतावनी होगी।

आईओएस में int से बचने के लिए सबसे अच्छा है। इसके बजाए, उसी प्रकार का उपयोग करें जिनके साथ आप काम कर रहे हैं।

NSInteger index = indexPath.row/2; 

डिफ़ॉल्ट चेतावनियों के कारण आप शायद इन्हें एक्सकोड 6 में देखते हैं। आप इन्हें एक्सकोड 5 में सही चेतावनी सेटिंग्स और 64-बिट के लिए बिल्डिंग के साथ आसानी से देख सकते हैं।

32

आप परियोजना सेटिंग को अपडेट कर सकते हैं, इस परियोजना का निर्माण सेटिंग्स में No

के लिए, सभी

Implicit conversion loses integer precision चेतावनी को दूर करने के

Implicit Conversion to 32 Bit Type की स्थापना करके।

enter image description here

+0

सभी के लिए जाने का रास्ता नहीं होना चाहिए, लेकिन अगर आपको पता है कि यह एक अच्छा संकेत क्या है! इस समय एकता के साथ काम करने वाले किसी भी व्यक्ति के लिए –

+1

वास्तव में आसान है – Tomskiis

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 

सीधे शब्दों में इस श्रेणी के बजाय NSIndexPath की पंक्ति और अनुभाग से rowIndex और sectionIndex गुणों का उपयोग गुण।

संबंधित मुद्दे