Hallo Ich verwende Kerndaten in meiner Anwendung und möchte ID-Attribut in jeder Entität als Autoinkrement festlegen. Ist es in Kerndaten möglich? Oder ich muss den Eintrag manuell eingeben und das Inkrement programmatisch verwalten ??Können wir Autoinkrementattribute in Kerndaten definieren?
31
A
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
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
- 1. Können wir statische Funktionen in tcOO definieren?
- 2. Können wir Enum innerhalb einer Funktion definieren?
- 3. Können wir Kerndaten verwenden, um eine Immobilie zu lagern?
- 4. Wie können wir Ausgabeparametergröße in der gespeicherten Prozedur definieren?
- 5. cut: Können wir mehrere Leerzeichen als Trennzeichen definieren?
- 6. Warum können wir eine Variable im Switch nicht zweimal definieren?
- 7. Können wir den MACRO-Namen als spezifische Zeichenfolge definieren?
- 8. Erstelle fehlende Autoinkrementattribute mit Schienenmigration
- 9. Können wir benutzerdefinierten Bereich in UAAC hinzufügen
- 10. Können wir Funktionszeiger in Google Go haben?
- 11. Können wir & in URL verwenden?
- 12. können wir nur Konstruktor in der Elternklasse deklarieren und in einer anderen Klasse in Java definieren?
- 13. Können wir eine Variable in einer while-Schleife in Java definieren?
- 14. können wir Breite li
- 15. Können wir Min-Margin und Max-Margin, Max-Padding und Min-Padding in CSS definieren?
- 16. Können Sie in F # eigene Operatoren definieren?
- 17. Können Sie "Literal" -Tabellen in SQL definieren?
- 18. Warum können wir nicht "..." umkehren?
- 19. können wir telefonieren im iphone?
- 20. Können wir Facebook programmatisch abmelden
- 21. Wie können wir Tweets von bestimmtem Land
- 22. Wie können wir State in Webservices erhalten?
- 23. können wir javascript in .net window application
- 24. Können wir Variablen in app.config-Datei
- 25. Können wir Callback-Funktion in dll setzen?
- 26. Können wir die Betriebssystemumgebungsvariablen in Java lesen?
- 27. Können wir iPhone Programm in C schreiben?
- 28. können wir Ganzzahl in Zeichen umwandeln
- 29. können wir doppelten Schlüssel in hashmap einfügen?
- 30. Können wir NSFileManager in iphone verwenden?
Wie objectId in NSNumber konvertieren, so dass Sie es auf Kerndaten speichern kann? –