2014-01-15 12 views
30

Ich bin Newcomer in iOS-Entwicklung, und ich verwende XCode 5.02 für die Entwicklung. Ich habe eine Entität (z. B. Benutzer), und ich muss eindeutige Einschränkung für seinen Namen festlegen, aber ich kann nicht finden, wie ich es durch den visuellen Editor tun kann. Ist es möglich, es über GUI zu tun? Oder ist es nur durch Code möglich? Danke für den Fortschritt. Wenn es möglich ist, werde ich mich freuen, einen Screenshot zu bekommen.Wie füge ich eindeutige Einschränkungen für einige Felder in Core Data hinzu

Antwort

66

Dies hat sich in iOS 9 geändert - Apple hat die Möglichkeit hinzugefügt, einzigartige Einschränkungen für Entitäten hinzuzufügen. Ich schrieb a blog post zu erklären, wie Sie diese Einrichtung erhalten.


tl; dr, gibt es einen neuen Abschnitt in der Seitenleiste, wenn ein Unternehmen im Editor für Core Data auswählen. Sie können festlegen, welche Einschränkung (en), die Sie in allen Instanzen eines Unternehmens während spart

Für die automatische Konfliktlösung eindeutig sein wollen, müssen Sie sicherstellen, dass Sie einen Merge-Richtliniensatz haben für Ihren Objektkontext verwaltet oder sonst werden Sie nur Fehlermeldungen erhalten beim Speichern (was eigentlich sein könnte, was Sie wollen)

_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
[_managedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; 

Halten Sie bei der Konfliktlösung Geist geschieht nur während spart, und nicht die Einsätze. Wenn Sie also einen NSFetchedResultsController verwenden, sehen Sie Entitäten mit nicht eindeutigen Einschränkungen, wenn sie eingefügt werden.

enter image description here

Wenn Sie möchten, dass Sie mit nicht eindeutigen Einschränkungen in Ihrem verwalteten Objektkontext keine Entitäten sicher, ohne zu speichern (wenn Sie die Verwendung eines FRC machen), ist this answer wahrscheinlich immer noch der beste Weg, gehen. Beachten Sie, dass es teuer ist, wenn Sie viele Einfügungen durchführen, da NSFetchRequests teure Operationen sind.

+0

Zachary Orr: Ihr Blog-Post-Link verweist auf dieselbe Seite ... –

+0

Whoops! Behoben .. –

+0

Ich habe der durch Kommas getrennten Liste einen Eigenschaftsnamen hinzugefügt, aber git status sagt, dass keine Änderungen an meinem Arbeitsverzeichnis vorgenommen wurden. – Skyler

9

Swift Lösung:

Wie in der anderen Antwort erwähnt, können Sie ab eindeutige Einschränkungen in Core Data für iOS9 haben.

Fügen Sie zu diesem Zweck zunächst der Entität Einschränkungen aus dem Core Data Editor hinzu (Erklärung in Zacharys Antwort).

Dann diese Zeile im Code hinzufügen:

managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy 

Hinweis: Die Eindeutigkeit überprüft, wenn Sie tun managedObjectContext.save() nicht, während Sie nur Objekte auf dem verwalteten Objekt hinzufügen.

NSMergeByPropertyObjectTrumpMergePolicy ist nur eine der Merge-Richtlinien, die den alten Wert mit dem neuen überschreibt. Möglicherweise möchten Sie die Dokumentation für andere Optionen überprüfen.

Verwandte Themen