2013-05-30 11 views
5

Ho colpito un muro di mattoni cercando di configurare la migrazione leggera di Core Data usando MagicalRecord. Ho esaminato tutti i post su questo argomento, utilizzando Google e SO. Comprendo come funziona il persistenteStoreCoordinatore quali sono le impostazioni che sto cercando di fare.Come si imposta la migrazione leggera di Core Data con MagicalRecord?

Ecco il mio codice:

AppDeligate.h

NSPersistentStoreCoordinator *persistentStoreCoordinator; 

AppDelegate.m

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

if (persistentStoreCoordinator != nil) { 
    return persistentStoreCoordinator; 
} 

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"saori.sqlite"]]; 

// handle db upgrade 
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

NSError *error = nil; 
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]]; 

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { 

    // Handle error 
} 

return persistentStoreCoordinator; 

}

sto ottenendo i seguenti errori, WHI ch capisco; quello che non so è dove sono questi oggetti (ho guardato nella mia app, e trovato nulla):

No @interface visibile per 'AppDelegate' dichiara il selettore 'applicationDocumentsDirectory' e

No @interface visibile per 'AppDelegate' dichiara il selettore 'managedObjectModel'

ho già creato i negozi:

xcdatamodeld

La maggior parte, se non tutto il codice che ho visto è simile; Non so se MagicalRecord gestisca questo per me o no perché non riesco a trovare alcun documento che indichi come farlo usando MR. La mia domanda è: cosa devo fare per farlo funzionare?

+0

Nel tuo ultimo screenshot, il nuovo modello non è ancora stato reso attivo, quindi il vecchio modello sarà ancora utilizzato. –

risposta

11

Il punto di MagicalRecord è che questo è gestito per voi:

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:####]; 

Controllare la documentazione circa la configurazione dello stack Core Data here.

+0

Sì, l'ho letto, ma non sapevo che MR avrebbe fatto _everything_ per me! Ho già avuto il tuo bit di codice; grazie ... Ancora una domanda: se non si utilizza il flag DEBUG, ma piuttosto creare il nuovo modello di me, sarà MR ancora trovare, o sia utilizzando il flag DEBUG il modo di notificare MR che deve fare il migrazione? In tal caso, come posso gestirlo quando l'app si trova in AppStore? – SpokaneDude

+0

La migrazione viene gestita passando determinati flag a Core Data. Ciò fa sì che i dati di base controllino le versioni del modello disponibili e le utilizzino per rilevare e correggere automaticamente le differenze. – Wain

+0

MagicalRecord caricherà tutti i modelli nel gruppo e li unirà insieme, a meno che non ci siano più versioni dello stesso modello e quindi unirà solo l'ultima versione con gli altri. Questo è il comportamento predefinito dei Core Data nel metodo + [NSManagedObjectModel managedObjectModelsFromBundle:], che è anche quello che MagicalRecord utilizza per caricare i modelli. – casademora

6

Come la mia comprensione della questione, vi suggerisco di utilizzare questo

[MagicalRecord setupAutoMigratingCoreDataStack]

Se non è stata modificata la versione del modello, si cambia in nuovo nato dal vecchio modello

8

Assicurati di controllare tutte queste cose:

Nel tuo AppDelegate.m di file:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [MagicalRecord setupAutoMigratingCoreDataStack]; 
    ... 
} 

Se non sono sotto controllo di versione il vostro modello già:

  • Seleziona il tuo modello di dati

Select your data model

  • Editor -> Aggiungi Versione Modello

    enter image description here

  • Nome della nuova versione, Fine

enter image description here

  • ci dovrebbero essere due versioni ora. Seleziona il file come mostrato.

enter image description here

  • cambiare la versione del modello per la nuova versione

enter image description here

  • La nuova versione dovrebbe essere controllato ora

enter image description here

Problemi correlati