2012-05-25 30 views
5

मैं कोर डेटा में एक इकाई संपत्ति 64-बिट पूर्णांक होना चाहता हूं। चूंकि मॉडल आईओएस पर चलने जा रहा है, और जहां तक ​​मुझे पता है कि ये डिवाइस 64-बिट नहीं हैं, मुझे लगा कि NSNumber जाने का तरीका था (कोर डेटा आपको आदिम प्रकारों के लिए ऑब्जेक्ट्स या स्केलर गुणों का विकल्प देता है)। मुझे लगता है कि NSNumber आंतरिक रूप से 64 बिट्स के लिए उपयुक्त प्रतिनिधित्व का ट्रैक रखने का ख्याल रखेगा।मैं कोर डेटा इंटीजर 64 प्रॉपर्टी का उपयोग कैसे करूं?

अब, मुझे किसी बिंदु पर मेरी इकाई में इस "64 बिट" संपत्ति से 1 को घटाना होगा (यदि आपको लगता है कि 64 बिट प्रॉपर्टी ट्विटर एपीआई में max_id पैरामीटर है), लेकिन ऐसा करने के लिए इसलिए, मुझे पहले एनएसएनंबर संपत्ति के अंदर संख्या को अनबॉक्स करने की आवश्यकता है।

तो क्या मुझे intValue मिलना चाहिए? longValue? unsignedIntValue? unsignedLongValue? लम्बा लम्बा? कौनसा?

उत्तर

7

के बाद से आप पहले से ही प्रकार (64 बिट पूर्णांक) पता है, आप इसके लिए जांच करने की जरूरत नहीं है।

एक NSNumber से बाहर एक 64 बिट पूर्णांक प्राप्त करने के लिए, निम्न में से एक कार्य करें:

NSInteger myInteger = [myNSNumber integerValue]; 
int64_t myInteger = [myNSNumber integerValue]; 

आदेश सिर्फ यह करने के लिए एक जोड़ने के लिए है, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

myNSNumber = [NSNumber numberWithInteger:[myNSNumber integerValue]+1]]; 

ध्यान दें कि आईओएस में 64 बिट डेटा प्रकार हैं जैसे int64_t और NSInteger

संपादित करें:
एकमात्र कारण है कि आप प्रयोग कर रहे हैं NSNumber 64 बिट पूर्णांक स्टोर करने के लिए है, तो आप सिर्फ अपने मॉडल उपवर्ग में इस तरह संपत्ति घोषित करने और unboxing/मुक्केबाजी पूर्णतः छोड़ कर सकते हैं:

@property (nonatomic) int64_t myIntValue; 

नोट कोर डेटा डिफ़ॉल्ट रूप से करता है कि अगर आप आदिम डेटा प्रकार के लिए अदिश गुण का उपयोग करें चुनते की विकल्प NSManagedObject उपवर्ग सुविधा बनाएँ।

0

एक NSNumber श्रेणी में इस डाल का प्रयास करें:

-(int64_t) int64value 
{ 
    if (sizeof(short) == 8) 
     return [self shortValue]; 
    if (sizeof(int) == 8) 
     return [self intValue]; 
    if (sizeof(long) == 8) 
     return [self longValue]; 
    if (sizeof(long long) == 8) 
     return [self longLongValue]; 

    return -1; // or throw an exception 
} 
+0

क्षमा करें क्या आप कह रहे हैं कि डिफ़ॉल्ट रूप से मुझे एनएसएनंबर से किस प्रारूप में मूल्य प्राप्त करना चाहिए, यह कहने का कोई तरीका नहीं है? समझ में नहीं आता है।यदि कोरडाटा मुझे बता रहा है कि मैं एनएसएनंबर में 64-बिट पूर्णांक स्टोर कर सकता हूं, तो मुझे उस NSNumber से 1 को घटाने के लिए एक आसान तरीका नहीं होना चाहिए, इस पर ध्यान दिए बिना कि आंतरिक रूप से इसका प्रतिनिधित्व कैसे किया जाता है? – SaldaVonSchwartz

+0

[myNSNumberObject objCType]; – bbarnhart

+0

myNSManagedObject.myNSNumber.objCType EXEC_BAD_ACCESS फेंकता है ... और संख्या सेट है। मैं इसे डीबगर में देख सकता हूं और इसे कंसोल पर प्रिंट कर सकता हूं। क्या देता है? – SaldaVonSchwartz

0

सी प्रकार NSNumber में निहित objCType

उदाहरण का उपयोग प्राप्त करने के लिए

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f]; 
NSLog(@"%s", [myFloat objCType]); 

प्रिंट होगा "f" के रूप में यह एक में शामिल है प्रकार फ्लोट का मूल्य।

इसके अलावा, @encode() देखें जो एक सी प्रकार का चरित्र लौटाएगा।

उदाहरण

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f]; 
if (strcmp(myFloat) == @encode(float)) { 
    NSLog(@"This is a float"); 
} 

इसके अलावा

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f]; 
CFNumberType numberType = CFNumberGetType((CFNumberRef)myFloat); 
+0

@enum? मुझे लगता है कि आपका मतलब @encode ... –

+0

धन्यवाद। ठीक कर दिया। – bbarnhart