2016-01-20 25 views
5

Próbuję wykonać moją pierwszą lekką migrację CoreData. Przeczytałem dwa przewodniki na temat lekkich migracji. Zarówno dodanie kodu do klasy CoreDataStack, modyfikowania zmiennych, takich jak NSPersistentStoreCoordinator i dodając:Jak wykonać lekką migrację CoreData w Swift

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

Moim problemem jest to, że mam doskonale funkcjonującą aplikację używając CoreData ale nie mam tej klasy lub czegoś podobnego. Mój problem to, dlaczego te projekty zakładają, że mam tę klasę i czy uda mi się osiągnąć moją niewielką migrację bez niej? Jeśli nie, w jaki sposób mogę go dodać?

Więcej informacji, w razie potrzeby do odebrania

We wrześniu I zbudowany aplikację używając CoreData. Był to mój pierwszy raz, kiedy korzystałem z CoreData i poszedłem za tym przewodnikiem Ray Wenderlich. Udało się świetnie, skończyłem aplikację, a teraz jest w sklepie. Teraz chciałbym wprowadzić pewne zmiany w aplikacji, które obejmują nowe atrybuty CoreData i kilka nowych elementów. Czytałem, że muszę ustawić nową wersję modelu.

znalazłem Ray Wenderlich guide ale używa tego pliku CoreDataStack.swift że nie mam:

CoreData Class

Co frustrujące jest to, że konfiguracja CoreData użyciu ich instrukcji i nie obejmują ten plik! Potem idę przeprowadzić migrację i zakładają, że ją mam.

poszedłem w poszukiwaniu innej metodzie lekkiej migracji, które oceniły tę alternative i zbyt kod odnośników, że nigdy nie wbudowane w moim 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() 
} 

Więc czytałem prowadnice i zrozumieć 90% samouczki. Po prostu potrzebuję kogoś, aby przyjrzeć się tym oryginalnym tutorialu CoreData i powiedz mi, gdzie, jeśli nie mam klasę CoreData, dodałbym lekki kodu, takich jak:

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

Odpowiedz

8

migracji opcje muszą być użyte w wywołaniu, które dodało magazyn trwały do ​​stałego koordynatora sklepu. Łatwo znajdziesz tę linię kodu, wykonując wyszukiwanie dla addPersistentStoreWithType.

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

Najprawdopodobniej Twój stos Rdzeń danych jest w klasie AppDelegate, ale niezależnie gdzie to jest, to jest, gdy trzeba dodać opcje migracji.

+0

Dziękujemy! 1 rano, ale spróbuję go rano i oznaczyć poprawne, jeśli działa. Czy miałbyś szansę rzucić trochę światła na to, o czym wspomniałem w tej klasie? Dlaczego w tym samouczku jest trwały sklep obsługiwany przez klasę? –

+0

Dziękujemy, wygląda na to, że zadziałało. Nie otrzymałem wydruku konsoli, który widziałem w samouczku, pokazującym migrację, ale dodałem atrybuty i elementy, a następnie uruchomiłem aplikację i nie miałem żadnych problemów. –