2012-05-16 10 views
5

मैं एक प्रकार के एनएसयूइंटर के प्रकार 'लम्बे लंबे' प्रकार के साथ एक चर निर्दिष्ट करने की कोशिश कर रहा हूं, ऐसा करने का सही तरीका क्या है?लागू रूपांतरण पूर्णांक सटीकता खो देता है: 'लंबे समय तक' 'एनएसआईएनटेगर' (उर्फ 'इंट')

मेरी कोड लाइन:

expectedSize = response.expectedContentLength > 0 ? response.expectedContentLength : 0; 

जहां expectedSize प्रकार NSUInteger की है और response.expectedContentLength की वापसी प्रकार प्रकार के 'long long' है। परिवर्तनीय response प्रकार NSURLResponse है।

संकलन से पता चला त्रुटि है:

सिमेंटिक मुद्दा: 'लंबी लंबे' 'NSUInteger' के लिए (उर्फ 'अहस्ताक्षरित int')

+1

आप एक स्पष्ट कलाकार कर सकते हैं, या आप इसे जानते हैं और "कैसे" से अधिक के बारे में आपका प्रश्न है? स्पष्ट कलाकार के साथ लाइन यहां दी गई है: 'अपेक्षित आकार = प्रतिक्रिया .expectedContentLength> 0? (NSUInteger) response.expectedContentLength: 0; ' – Clafou

उत्तर

5

यह कुछ सीमा की जाँच के साथ, वास्तव में सिर्फ एक डाली है:

const long long expectedContentLength = response.expectedContentLength; 
NSUInteger expectedSize = 0; 

if (NSURLResponseUnknownLength == expectedContentLength) { 
    assert(0 && "length not known - do something"); 
    return errval; 
} 
else if (expectedContentLength < 0) { 
    assert(0 && "too little"); 
    return errval; 
} 
else if (expectedContentLength > NSUIntegerMax) { 
    assert(0 && "too much"); 
    return errval; 
} 

// expectedContentLength can be represented as NSUInteger, so cast it: 
expectedSize = (NSUInteger)expectedContentLength; 
+0

' <0' चेक सही नहीं है। मान -1 का अर्थ है "अपेक्षित सामग्री लंबाई के संबंध में कोई उम्मीद नहीं की जा सकती है" (NSURLResponse.h देखें) –

+0

@ उदाहरण के लिए डिमिट्री जोड़ा गया मामला। यह एक बहुत ही विशिष्ट कार्यान्वयन विस्तार है, जो पकड़ा गया होगा। यह एक पूर्ण और पूर्ण कार्यान्वयन के बजाय प्रक्रिया का प्रदर्शन करने के लिए था (यह अभी भी नहीं है)। – justin

11

आप आज़मा सकते हैं: अंतर्निहित रूपांतरण पूर्णांक परिशुद्धता खो देता है NSNumber के साथ रूपांतरण:

NSUInteger expectedSize = 0; 
    if (response.expectedContentLength) { 
    expectedSize = [NSNumber numberWithLongLong: response.expectedContentLength].unsignedIntValue; 
    } 
संबंधित मुद्दे