2015-06-04 1 views
0

Я добавил расширение Today в моем существующем приложении и настроил отдельный стек основных данных (повторное использование того же кода, который используется для настройки основных данных для основного приложения).
Мои данные приложения удаляются, когда я запускаю расширение «Сегодня», как если бы настройка текущего ядра данных данных удаляла существующие данные. См ниже код для возврата persistentCoordinator:Сегодня Расширение, удаляющее данные в sqlite

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

Похоже, что ваш 'storeurl' неверен, убедитесь, что он использует сгруппированную папку. Ваша функция 'applicationDocumentsDirectory' должна возвращать groupPath, в вашем случае кажется, что приложение создает новый CoreData, а не использует правильный. – iphonic

+0

Я использую идентификатор групповой группы для установки основных данных. Данные удаляются, только если я попытаюсь открыть сегодня (выборка данных), а главное приложение не будет уничтожено. Если основное приложение убито, сегодня работает нормально, и данные не удаляются. –

+0

Почему вы устанавливаете 'journal_mode' в' MEMORY'? Документация SQLite говорит, что этот «... сохраняет дисковый ввод-вывод, но за счет безопасности и целостности базы данных».] (Https://sqlite.org/pragma.html) –

ответ

0

После много отладки, и чтение гугле блоги и документы, я думаю, что проблема была из-за mergedModelFromBundles метода NSManagedObjectModel.
У меня было несколько .xcdatamodels в моем пакете и при настройке основного стека данных я использовал вышеупомянутый метод для слияния одной модели.
В качестве базового стека данных, созданного для Today, модель, возвращенная методом, отличалась от той, которая использовалась главным приложением для создания хранилища sqlite, и, следовательно, возвращаемое хранилище было различным и требовало миграции.
Но миграция чаще всего не срабатывала и удаляла мой .sqlite (созданный главным приложением) и создавал новый sqlite.
Одно решение, которое я нашел в том, чтобы использовать
NSManagedObjectModel(contentsOfURL: modelPathURL!)
метод, чтобы получить модель управляемого объекта, где URL это путь URL из momd файла в связке.
См: Core Data Migration Guide

Однако, я еще не понял, как дать путь URL из трех различных xcdatamodelids как единый путь URL и как перенести их, если в будущем каких-либо изменений xcdatamodel.
Итак, в настоящее время я объединил три xcdatamodels в один xcdatamodel в своем пакете, чтобы решить эту проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^