2015-05-24 7 views
14

मैं मुख्य रूप से आईफोन 6, 6 प्लस और आईपैड का उपयोग कर परीक्षण कर रहा हूं। आईफोन 5 सिम्युलेटर पर आज मेरे ऐप की कोशिश की, और कोर डेटा त्रुटि मिली।कोर डेटा स्केलर त्रुटि केवल कुछ डिवाइसों पर

CoreData: error: Property 'setId:' is a scalar type on class 'AppName.EntityName' that does not match its Entity's property's scalar type. Dynamically generated accessors do not support implicit type coercion. Cannot generate a setter method for it

अब, वहाँ कोई 'setId' मेरे एप्लिकेशन में वस्तु है, लेकिन निश्चित रूप से इकाई एक 'आईडी' वस्तु है, जो एक पूर्णांक के रूप में सेट कर दिया जाता है।

class Entity: NSManagedObject { 
    @NSManaged var id: Int 
} 

कोर डेटा मॉडल में, विशेषता प्रकार Integer64 पर सेट है। यह मेरी समस्या हो सकती है, क्योंकि मैंने यह जानकर कि सबसे अच्छा क्या था। मेरे पास मॉडल और कक्षा में अन्य विशेषताएं हैं, लेकिन वे सभी तार हैं।

यह एक फिक्स और स्पष्टीकरण दोनों की तलाश में है कि यह केवल कुछ उपकरणों पर क्यों होता है, इसलिए मैं सीख सकता हूं!

उत्तर

27

यदि कोर डेटा प्रकार इंटीजर 64 है तो आपको संपत्ति को Int64 (या एक्सकोड प्रबंधित ऑब्जेक्ट सबक्लास बनाएं) घोषित करना चाहिए।

Int प्रोसेसर आर्किटेक्चर के आधार पर 32 बिट या 64 बिट हो सकता है।

वैकल्पिक रूप से, संपत्ति को स्केलर संपत्ति के बजाय NSNumber* के रूप में परिभाषित करें। बेशक आपको यह ध्यान रखना होगा कि 32-बिट प्लेटफ़ॉर्म पर मान Int की सीमा से अधिक नहीं हैं।

+0

मैंने एक्सकोड को कक्षा बनाने दिया, लेकिन फिर मैंने आईडी को बाद में जोड़ा। साथ ही, अगर मैं संपत्ति को Int64 पर सेट करता हूं, तो मुझे इस संपत्ति में डेटा दर्ज करने का प्रयास करते समय अपने पूरे कोड को कनवर्ट करना होगा। मॉडल मिलान int बनाने के बजाय क्या कोई तरीका है? – Tim

+1

@ टिम: कोर डेटा केवल आकार के पूर्णांक (16, 32, 64 बिट) तय किया गया है। –

+0

मैं इसे देखता हूं। तो मेरे कोड में Int का उपयोग करने का कोई तरीका नहीं है और फिर सीडी में सहेजने पर एक आकार में परिवर्तित करें? स्पष्टीकरण के लिए निश्चित रूप से आभारी, मैं बस एक और सार्वभौमिक समाधान की तलाश में था। – Tim

1

वैकल्पिक रूप से, आप अपने खुद के सेटर/गेटर विधि है कि एक NSNumber उदाहरण में Int बदल देती है और आदिम मूल्य पर इस गुजरता लिख ​​सकते हैं। उदा .:

private(set) var publicId: Int { 
    get { 
    self.willAccessValueForKey("publicId") 
    let value = self.primitivePublicId.longValue 
    self.didAccessValueForKey("publicId") 
    return value 
    } 
    set { 
    self.willChangeValueForKey("publicId") 
    self.primitivePublicId = NSNumber(long: newValue) 
    self.didChangeValueForKey("publicId") 
    } 
} 
@NSManaged private  var primitivePublicId: NSNumber 
संबंधित मुद्दे