Заменить файл Sqlite на iOS - ошибка основных данных 14
У меня есть файл Sqlite с предварительно загруженными данными. Я использую Core Data для чтения и отображения данных из файла Sqlite.
Вот как я читаю данные:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL;
NSString *path = [[NSBundle mainBundle] pathForResource:@"myAppname" ofType:@"sqlite"];
storeURL = [NSURL fileURLWithPath:path];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
// This dictionary automatically updates and migrates the store if it changes
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
[NSNumber numberWithBool: NO], NSReadOnlyPersistentStoreOption,
nil];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
/*
Replace this implementation 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.
Typical reasons for an error here include:
* The persistent store is not accessible;
* The schema for the persistent store is incompatible with current managed object model.
Check the error message to determine what the actual problem was.
If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.
If you encounter schema incompatibility errors during development, you can reduce their frequency by:
* Simply deleting the existing store:
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]
* Performing automatic lightweight migration by passing the following dictionary as the options parameter:
@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}
Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.
*/
if (error) {
[myErrorAlert showError:error];
}
CLS_LOG(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
Однако мне нужно обновить файл Sqlite новыми данными, которые я сделал вне приложения с помощью редактора данных sqlite.
Теперь, когда я копирую, вставляю и перезаписываю файл "myAppname.sqlite", я получаю следующую ошибку:
CoreData: error: (14) I/O error for database at /Users/Username/Library/Application Support/iPhone Simulator/7.1/Applications/45C373D7-8A54-48EF-BA3C-2E2C6AB7467F/myAppname.app/myAppname.sqlite. SQLite error code:14, 'unable to open database file'
Я пытался добавить NSDictionary *options = @{ NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}
но такая же ошибка существует.
Также в некоторых ответах предлагалось удалить ссылку на файл и создать новый, но я понятия не имею, как это сделать.
Любая идея?
РЕДАКТИРОВАТЬ
Мне удалось заставить его работать.
Откройте оригинальное приложение на симуляторе iOS 6.
Замените файл Sqlite новым файлом и запустите приложение только для симулятора iOS 6, а не для симулятора iOS7. Нет проблем.
Однако все еще хотел бы знать другие комментарии.