2010-11-03 11 views
31

हैलो मैं अपने आवेदन में कोर डेटा का उपयोग कर रहा हूं, और प्रत्येक इकाई में ऑटोइनक्रिकमेंट के रूप में आईडी विशेषता सेट करना चाहता हूं। क्या यह मूल डेटा में संभव है? या मुझे मैन्युअल रूप से प्रविष्टि डालना है और प्रोग्रामिंग में वृद्धि का प्रबंधन करना है ??क्या हम मूल डेटा में ऑटो वृद्धि गुण परिभाषित कर सकते हैं?

उत्तर

36

यदि आप प्राथमिक कुंजी के लिए आईडी के बारे में सोच रहे हैं तो कोर डेटा आपके लिए इसे संभालता है। प्रत्येक ऑब्जेक्ट पर objectID प्रॉपर्टी है जिसे आप इसे देखने के लिए एक्सेस कर सकते हैं। जब आप प्रबंधित ऑब्जेक्ट संदर्भ से कोई ऑब्जेक्ट बनाते हैं, तो कोर डेटा अस्थायी आईडी निर्दिष्ट करता है। जब आप प्रबंधित ऑब्जेक्ट संदर्भ से परिवर्तन करते हैं, तो कोर डेटा एक परमिट आईडी निर्दिष्ट करता है। मुझे नहीं लगता कि मैन्युअल रूप से इसे आजमाने और सेट करने का अच्छा विचार होगा। अधिक जानकारी के लिए

this stackoverflow thread पढ़ें।

+0

कैसे NSNumber में objectId कन्वर्ट करने के लिए ताकि आप कोर डेटा पर यह स्टोर कर सकते हैं? –

0

आपको इस तरह की है कि के बाद

saveContext() 

ऑब्जेक्टिव-सी कर सकते हैं:

- (int)getAutoIncrement { 
    int number = 0; 
    NSURL *url = [[self objectID] URIRepresentation]; 
    NSString *urlString = url.absoluteString 
    NSString *pN = [[urlString componentsSeparatedByString:@"/"] lastObject]; 
    if ([pN containsString:"p"]){ 
     NSString *stringPart = [pN stringByReplacingOccurrencesOfString:@"p" withString:@""] 
     number = stringPart.intValue 
    } 
    url = nil; 
    urlString = nil; 
    pN = nil; 
    stringPart = nil; 
    return number; 
} 

स्विफ्ट:

func getAutoIncremenet() -> Int64 { 
    let url = self.objectID.uriRepresentation() 
    let urlString = url.absoluteString 
    if let pN = urlString.components(separatedBy: "/").last { 
     let numberPart = pN.replacingOccurrences(of: "p", with: "") 
     if let number = Int64(numberPart) { 
      return number 
     } 
    } 
    return 0 
} 
0

मैं NSFetchedResultsController साथ इस तरह से इस्तेमाल किया:

पहले छंटाई:

fetchRequest.sortDescriptors = [NSSortDescriptor(key: "id", ascending: false)] 

फिर जोड़ें वस्तु विधि में:

// Minimum id value 
var recordID = 1 
if let lastRecordID = fetchedResultsController.fetchedObjects?.first?.id { 
    recordID = Int(lastRecordID) + 1 
} 

let newRecord = Record(context: persistentContainer.viewContext) 
newRecord.id = Int32(recordID) 
संबंधित मुद्दे