У меня есть живое приложение на App Store, который использует SQLite в качестве базы данных, теперь при следующем обновлении я хочу реализовать Core Data в App загрузки всех данных из файла .sqlite без нарушения приложения , Я читал учебники, но это мало помогло. Я не знаю, как это сделать. Пожалуйста, укажите мне в правильном направлении.SQLite для ядра миграции данных
ответ
Из основных данных documentation:
Как я могу использовать существующую базу данных SQLite с Core Data?
У вас нет, если вы не импортируете существующую базу данных SQLite в хранилище основных данных . Хотя Core Data поддерживает SQLite как один из его постоянных типов хранилищ , формат базы данных является закрытым. Вы не можете создать базу данных SQLite с использованием собственного SQLite API и использовать его непосредственно с Core Data. . Если у вас есть существующая база данных SQLite, вам необходимо импортировать ее в хранилище Core Data. Кроме того, не манипулировать существующий основные данные созданного SQLite магазина с использованием нативного SQLite API
Вы можете попробовать с помощью инструмента https://github.com/tapasya/Sqlite2CoreData, но это кажется довольно устареть.
Трудность в основном зависит от того, насколько хорошо настроена ваша архитектура кода. Нет простой процедуры для этого ... Добавление основных данных в проект, если они достаточно просты, понимая, что это совсем другое дело.
Вот несколько вещей, которые вы можете обратить внимание:
CoreData создать SQLite файл по-своему, то есть вы не можете кормить его любой .sqlite файл и надеяться на лучшее. Вы должны будете позволить CoreData создать свой собственный файл и перенести данные из вашего хранилища sqlite в основной файл данных.
Ваши таблицы становятся классами (как в большинстве ORM, это называется Entities), и вы не можете создавать экземпляр нового объекта напрямую, что означает, что если у вас есть таблица Employee, вы не можете выполнять Employee * john = [[Employee alloc] init ]; Этого не будет! Элемент Insert отвечает за класс NSEntityDescritpion. Так проверьте код для возможной ошибки там ...
Если основные данные немного к сложному, Realm является хорошей альтернативой ORM: https://realm.io/products/objc/
Успехов ...
Я думаю, @SaintThread попал в основную проблему. Причиной этого является то, что Core Data не является оболочкой SQLite - это другой API с различными предположениями, которые просто используют SQLite внутри. Core Data не пытается быть совместимым с тем, как вы будете использовать SQLite, если бы вы использовали SQLite самостоятельно.
При этом, если вы все еще хотите перенести миграцию, вам придется разработать модель основных данных, а затем написать полностью настраиваемый код для переноса из существующего SQLite-файла в Core Data. Ваш код должен будет читать все, начиная с SQLite, преобразовывать его в новое представление Core Data, сохранять изменения и удалять существующие SQLite-файлы.
При удалении существующего SQLite-файла обязательно удалите файлы журнала SQLite (если есть).
Вот как я нашел работу лучше всего; Но убедитесь, что вы используете хорошую обработку ошибок при бросках.
Это оригинальный путь от Apple:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataBooks.CDBStore"];
/*
Set up the store.
For the sake of illustration, provide a pre-populated default store.
*/
NSFileManager *fileManager = [NSFileManager defaultManager];
// If the expected store doesn't exist, copy the default store.
if (![fileManager fileExistsAtPath:[storeURL path]]) {
NSURL *defaultStoreURL = [[NSBundle mainBundle] URLForResource:@"CoreDataBooks" withExtension:@"CDBStore"];
if (defaultStoreURL) {
[fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL];
}
}
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @YES, NSInferMappingModelAutomaticallyOption: @YES};
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSError *error;
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
....
Это новый способ - Xcode8
Swift 3 preload from SQL files in appDelegate
Core Data with pre-filled .sqlite (Swift3)
Why does not copy database.db from bundle to document directory in swift 3?
https://www.raywenderlich.com/145877/core-data-tutorial-multiple-managed-object-contexts-2
- 1. Странные ошибки данных ядра во время миграции
- 2. Регистр CPU для миграции ядра
- 3. миграции asp.net Web API для asp.net ядра
- 4. Обновление данных ядра iPhone из загруженного sqlite
- 5. Модель данных с изменением данных ядра без миграции
- 6. Рекомендации по миграции базы данных в приложении для Sqlite
- 7. Что происходит с SQLite-файлом после неудачной миграции основных данных?
- 8. Основные функции ядра SQLite
- 9. Как создать единую вспомогательную функцию для данных ядра и sqlite
- 10. инструмент миграции данных и инструмент миграции схемы
- 11. Симулятор данных ядра IPhone
- 12. Миграции схемы базы данных ядра RC2 Core RC2
- 13. Ошибка миграции данных ядра Ошибка какао 134130 Не удается найти модель для исходного хранилища
- 14. Странный сбой данных ядра с _Unwind_SjLj_Resume после миграции
- 15. Сомнение в данных ядра
- 16. Синхронизация базы данных данных ядра/.sqlite в Dropbox
- 17. Обновление данных ядра ядра
- 18. Ошибка переноса данных ядра
- 19. sqlite to mysql проблема миграции
- 20. Как применять миграции из кода (EF ядра)
- 21. Xcode 5/Mavericks - данные ядра ядра Cocoa SQLite DB Location
- 22. Преобразование данных ядра iOS
- 23. миграции данных
- 24. Сохранение данных о местоположении ядра для данных ядра?
- 25. Лучший способ миграции огромных баз данных sqlite в Etherpad Lite
- 26. Правильное решение для миграции данных
- 27. Ошибка ввода данных ядра данных
- 28. Как избежать миграции на лету, блокируя базу данных SQLite?
- 29. Первичный ключ для ввода данных ядра iPhone
- 30. Игнорировать атрибут схемы для SQLite во время миграции?
почему? какую выгоду вы думаете, что получите? работает ли ваше существующее SQL-решение правильно? есть ли что-то, чего он не может сделать? – Wain