2013-02-05 4 views
5

Ho trovato questi tutorial di Stanford https://itunes.apple.com/us/course/ipad-iphone-app-development/id495052415 e ho ascoltato una conferenza sui dati di base, che è davvero eccezionale.UIManagedDocument e dati principali

Mostra come accedere ai dati di base tramite UIManagedDocument ... L'unica cosa che non capisco come UIManagedDocument sa quale modello dovrebbe utilizzare, perché non lo vedo impostato da nessuna parte?

Per sommarlo quando si utilizza UIManagedDocument, come si definisce il modello di database che verrà utilizzato?

risposta

6

ho trovato la risposta:

'UIManagedDocument' prende tutto i modelli dal pacchetto principale della tua applicazione, e rende l'unione di questi Modelli. Se si dispone di un solo modello, viene utilizzato quel modello.

Questo può essere modificato sovrascrivendo la classe 'UIManagedDocument'.

+0

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

1

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]; 
+0

Non credo che tu abbia capito bene la domanda, o almeno non ho capito la tua risposta ... ti darò il voto per provare ... – MegaManX