2010-11-03 8 views

Antwort

36

Wenn Sie an die ID für die Primärschlüssel denken, werden diese Daten von den Kerndaten verarbeitet. Auf jedem Objekt befindet sich eine objectID Eigenschaft, auf die Sie zugreifen können, um sie zu sehen. Wenn Sie ein Objekt aus dem Kontext des verwalteten Objekts erstellen, weisen Core-Daten eine temporäre ID zu. Wenn Sie die Änderungen über den Kontext des verwalteten Objekts festschreiben, weisen die Core-Daten eine Perminant-ID zu. Ich denke nicht, dass es eine gute Idee wäre, dies manuell zu versuchen und einzustellen.

Lesen Sie this stackoverflow thread für weitere Details.

+0

Wie objectId in NSNumber konvertieren, so dass Sie es auf Kerndaten speichern kann? –

0

Sie können es tun, wie die nach

saveContext() 

Objective-C:

- (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; 
} 

Swift:

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

ich auf diese Weise mit NSFetchedResultsController verwendet:

erste Sortierung:

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

Dann Add Objektmethode:

// 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) 
Verwandte Themen