Расширение Today, удаляющее данные в sqlite
Я добавил расширение Today в свое существующее приложение и настроил отдельный стек основных данных (повторно используя тот же код, который используется для настройки основных данных для основного приложения).
Данные моего приложения удаляются, когда я запускаю расширение Today, как будто установка базового стека данных Today удаляет существующие данные. Обратитесь ниже код для возврата persistentCoordinator
:
let options = [NSMigratePersistentStoresAutomaticallyOption:true,
NSInferMappingModelAutomaticallyOption:true,
NSSQLitePragmasOption:["journal_mode":"MEMORY"]]
var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: options, error: &error) == nil {
NSLog("Unresolved error \(error)")
}
return coordinator
1 ответ
После долгих отладок и чтения блогов и документов в Google, я думаю, что проблема была в mergedModelFromBundles
метод NSManagedObjectModel
,
У меня было несколько .xcdatamodels в моем комплекте, и во время установки основного стека данных я использовал описанный выше метод для объединения одной модели.
Поскольку базовый стек данных настроен для Today, модель, возвращаемая из метода, отличалась от модели, используемой главным приложением для создания хранилища sqlite, и, следовательно, возвращаемое постоянное хранилище было другим и требовало миграции.
Но миграция чаще всего приводила к сбою и удалению моего.sqlite (настроенного главным приложением) и настраивала новый sqlite.
Одно решение, которое я нашел, состояло в том, чтобы использоватьNSManagedObjectModel(contentsOfURL: modelPathURL!)
метод для получения управляемой объектной модели, где url - это путь к файлу momd в комплекте.
См. Руководство по миграции основных данных.
Тем не менее, я еще не понял, как дать URL-адрес пути трех разных xcdatamodelids как URL-адрес одного пути и как их перенести, если в будущем какие-либо xcdatamodel изменятся.
Итак, в настоящее время я объединил три xcdatamodel в одну xcdatamodel в своем комплекте, чтобы решить эту проблему.