Laden eines Datenmodells In einigen Fällen müssen Sie keinen Code zum Laden eines Modells schreiben. Wenn Sie eine dokumentbasierte Anwendung unter OS X verwenden, verwaltet NSPersistentDocument die Aufgabe, das Modell Ihrer Anwendung für Sie zu finden und zu laden. Wenn Sie Xcode zum Erstellen einer Nicht-Dokumentanwendung verwenden, die Core Data (für OS X oder für iOS) verwendet, enthält der Anwendungsdelegate Code zum Abrufen des Modells. Der Name eines Modells - dargestellt durch den Dateinamen, der zum Speichern auf der Festplatte verwendet wird - ist zur Laufzeit nicht relevant. Sobald das Modell von Core Data geladen wurde, ist der Dateiname bedeutungslos und hat keine Verwendung, so dass Sie die Modelldatei beliebig benennen können.
Wenn Sie ein Modell laden möchten selbst gibt es zwei Mechanismen können Sie:
Sie können von einer bestimmten URL ein einziges Modell laden, um die Instanz-Methode initWithContentsOfURL mit :. Dies ist die allgemein bevorzugte Technik. In der Regel verfügt eine Anwendung über ein einzelnes Modell. Mit dieser Methode stellen Sie sicher, dass Sie nur dieses Modell laden. Sie können auch einzelne Modelle über URLs laden und sie dann mithilfe von modelByMergingModels vereinheitlichen: bevor Sie einen Koordinator mit ihnen instanziieren. In Fällen, in denen Sie mehr als ein Modell haben - insbesondere in Fällen, in denen die Modelle verschiedene Versionen desselben Schemas darstellen - ist es wichtig zu wissen, welches Modell geladen werden soll (Modelle zur Laufzeit mit denselben Entitäten zusammenführen) würde Namenskollisionen und Fehler verursachen). Diese Methode ist auch nützlich, wenn Sie das Modell außerhalb des Bundles für Ihre Anwendung speichern möchten und es daher über eine Dateisystem-URL referenzieren muss.
Sie können ein zusammengeführtes Modell aus einer bestimmten Sammlung von Bundles mithilfe der Klassenmethode mergedModelFromBundles: erstellen. Diese Methode kann in Fällen nützlich sein, in denen die Segregation von Modellen nicht wichtig ist. Beispielsweise kennen Sie Ihre Anwendung und ein Framework, das mit Modellen verknüpft ist, die Sie benötigen oder laden möchten. Mit der Klassenmethode können Sie problemlos alle Modelle gleichzeitig laden, ohne sich Gedanken über die Namen machen zu müssen, oder einen speziellen Initialisierungscode eingeben, um sicherzustellen, dass alle Ihre Modelle gefunden werden.
Zugriff und die Verwendung eines Managed Object Model zur Laufzeit
NSManagedObjectModel *model = <#Get a model#>;
NSFetchRequest *requestTemplate = [[NSFetchRequest alloc] init];
NSEntityDescription *publicationEntity =
[[model entitiesByName] objectForKey:@"Publication"];
[requestTemplate setEntity:publicationEntity];
NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:
@"(mainAuthor.firstName like[cd] $FIRST_NAME) AND \
(mainAuthor.lastName like[cd] $LAST_NAME) AND \
(publicationDate > $DATE)"];
[requestTemplate setPredicate:predicateTemplate];
[model setFetchRequestTemplate:requestTemplate
forName:@"PublicationsForAuthorSinceDate"];
eine Anfrage Vorlage
NSManagedObjectModel *model = <#Get a model#>;
NSError *error = nil;
NSDictionary *substitutionDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"Fiona", @"FIRST_NAME", @"Verde", @"LAST_NAME",
[NSDate dateWithTimeIntervalSinceNow:-31356000], @"DATE", nil];
NSFetchRequest *fetchRequest =
[model fetchRequestFromTemplateWithName:@"PublicationsForAuthorSinceDate"
substitutionVariables:substitutionDictionary];
NSArray *results =
[aManagedObjectContext executeFetchRequest:fetchRequest error:&error];
danke ... Ich habe gesucht es den ganzen Tag. aber im Ernst, Apple, für Core-Daten und IOS im Allgemeinen gibt es einfach zu viel Stoff schreiben müssen. – user1297061