2016-01-20 8 views
5

Sto tentando la mia prima migrazione leggera CoreData. Ho letto due guide sulle migrazioni leggere. Entrambi aggiungere il codice per una classe CoreDataStack, modificando variabili come NSPersistentStoreCoordinator e aggiungendo:Come eseguire una migrazione LightData CoreData in Swift

let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true, 
    NSInferMappingModelAutomaticallyOption: true] 

Il mio problema è che ho un'applicazione perfettamente funzionante utilizzando CoreData ma non ho quella classe o qualcosa di simile. Il mio problema è, perché questi progetti presumono che io abbia questa classe e posso ottenere la mia migrazione leggera senza di essa? In caso contrario, come posso aggiungerlo?

Ulteriori informazioni, se necessario per rispondere

A settembre ho costruito un app utilizza CoreData. Era la mia prima volta che utilizzo CoreData e ho seguito questa guida di Ray Wenderlich. Ha funzionato benissimo, ho finito l'app e ora è nel negozio. Ora vorrei iniziare a apportare alcune modifiche all'app, che riguardano i nuovi attributi CoreData e alcune nuove entità. Ho letto che ho bisogno di installare una nuova versione del modello.

Ho trovato un Ray Wenderlich guide ma utilizza questo file CoreDataStack.swift che non ho:

CoreData Class

cosa frustrante è che ho configurato CoreData utilizzando loro guida e non ha incluso quel file! Poi vado a fare una migrazione e loro presumono di averlo.

sono andato alla ricerca di un altro metodo di migrazione leggero, trovato questo alternative ed è anche il codice riferimenti che non ho mai costruito nella mia CoreData:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { 
// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail. 
// Create the coordinator and store 
var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) 
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("MyLog.sqlite") 
var error: NSError? = nil 
var failureReason = "There was an error creating or loading the application's saved data." 
if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil { 
    coordinator = nil 
    // Report any error we got. 
    var dict = [String: AnyObject]() 
    dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" 
    dict[NSLocalizedFailureReasonErrorKey] = failureReason 
    dict[NSUnderlyingErrorKey] = error 
    error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) 
    // Replace this with code to handle the error appropriately. 
    // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
    NSLog("Unresolved error \(error), \(error!.userInfo)") 
    abort() 
} 

Così ho letto le guide e capire il 90% del esercitazioni. Ho solo bisogno di qualcuno che si prenda un'occhiata a quel tutorial originale CoreData e dimmi dove, se non ho una classe CoreData, vorrei aggiungere il codice leggero come ad esempio:

let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true, 
    NSInferMappingModelAutomaticallyOption: true] 

risposta

8

La migrazione opzioni devono essere utilizzato nella chiamata che ha aggiunto l'archivio permanente al coordinatore dell'archivio permanente. Troverai facilmente questa riga di codice eseguendo una ricerca per addPersistentStoreWithType.

try coordinator!.addPersistentStoreWithType(
    NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions) 

Molto probabilmente il vostro stack Core Data è nella classe AppDelegate, ma indipendentemente dove si trova, questo è dove si deve aggiungere le opzioni di migrazione.

+0

Grazie! 01:00 ma lo proverò al mattino e segnerà correttamente se funziona. Qualche possibilità di far luce su quello che ho menzionato in classe? Perché, in quel tutorial, c'è lo store persistente gestito dalla classe? –

+0

Grazie, sembra aver funzionato. Non ho ottenuto la stampa della console che ho visto nel tutorial, mostrando una migrazione, ma ho aggiunto attributi ed entità e poi ho eseguito l'app e non ho avuto problemi. –