Caricamento di un modello di dati In alcuni casi, non è necessario scrivere alcun codice per caricare un modello. Se si utilizza un'applicazione basata su documenti su OS X, NSPersistentDocument gestisce l'attività di ricerca e caricamento del modello dell'applicazione per conto dell'utente. Se si utilizza Xcode per creare un'applicazione non documentale che utilizza Core Data (per OS X o per iOS), il delegato dell'applicazione include il codice per recuperare il modello. Il nome di un modello, rappresentato dal nome file utilizzato per memorizzarlo su disco, non è rilevante in fase di runtime. Una volta che il modello viene caricato da Core Data, il nome del file non ha senso e non ha alcun senso, quindi puoi dare un nome al file del modello come preferisci.
Se si desidera caricare un modello da soli, ci sono due meccanismi è possibile utilizzare:
È possibile caricare un singolo modello da un URL specifico, utilizzando il metodo di istanza initWithContentsOfURL :. Questa è la tecnica generalmente preferita. In genere un'applicazione ha un singolo modello e, utilizzando questo metodo, si garantisce di caricare solo quel modello. È inoltre possibile caricare singoli modelli tramite URL e quindi unificarli utilizzando modelByMergingModels: prima di creare un'istanza con un coordinatore.
Nei casi in cui si dispone di più di un modello, e in particolare nei casi in cui i modelli rappresentano versioni diverse dello stesso schema, conoscere il modello da caricare è essenziale (unione di modelli con le stesse entità in runtime in un'unica raccolta causerebbe collisioni di nomi ed errori). Questo metodo è utile anche se si desidera archiviare il modello al di fuori del bundle per l'applicazione, quindi è necessario fare riferimento a tale URL tramite un URL del file system.
È possibile creare un modello unito da una raccolta specifica di pacchetti, utilizzando il metodo di classe mergedModelFromBundles :. Questo metodo può essere utile nei casi in cui la separazione dei modelli non è importante; ad esempio, è possibile conoscere l'applicazione e un framework collegato a entrambi i modelli necessari o che si desidera caricare. Il metodo di classe consente di caricare facilmente tutti i modelli contemporaneamente senza dover prendere in considerazione i nomi o inserire codice di inizializzazione specializzato per verificare che tutti i modelli siano stati trovati.
Accesso e utilizzo di un modello di oggetti gestiti a runtime
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"];
Utilizzando un FETCH modello
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];
grazie ... ho cercato tutto il giorno. ma seriamente apple, per i dati di base e ios in generale c'è solo troppa roba da dover scrivere. – user1297061