В моем приложении мне иногда нужно перестроить и повторно заполнить файл базы данных. SQLite databse создается и управляется стеком CoreData.
То, что я пытаюсь сделать, это удалить файл, а затем просто воссоздать объект persistentStoreCoordinator.
Он работает под симулятором, но не на устройстве, где я получаю такую ошибку:
NSFilePath = "/var/mobile/Applications/936C6CC7-423A-46F4-ADC0-7184EAB0CADD/Documents/MYDB.sqlite";
NSUnderlyingException = I/O error for database at /var/mobile/Applications/936C6CC7-423A-46F4-ADC0-7184EAB0CADD/Documents/MYDB.sqlite. SQLite error code:1, 'table ZXXXX already exists';
Я не могу найти причину этого в любом случае. Это указывает на две разные проблемы - ошибка Cocoa 256 указывает, что файл не существует или не читается. Но файл IS создан после создания persistenStoreCoordinator, хотя он пуст, но после выполнения некоторых запросов он исчезает.
Второе сообщение, указывающее на попытку создания существующей таблицы alredy, довольно странно в этом случае.
Я очень смущен и не могу понять, что здесь происходит. Мой код выглядит следующим образом:
NSString *path = [[WLLocalService dataStorePath] relativePath];
NSError *error = nil;
WLLOG(@"About to remove file %@", path);
[[NSFileManager defaultManager] removeItemAtPath: path error: &error];
if (error != nil) {
WLLOG(@"Error removing the DB: %@", error);
}
[self persistentStoreCoordinator];
WLLOG(@"Rebuild DB result %d", [[NSFileManager defaultManager] fileExistsAtPath: path]);
После того, как этот код будет выведен, файл DB существует, но пуст. Когда выполняется первый запрос (и все последующие), он дает мне ошибку выше, и файл исчезает.
Кто-нибудь знает, что с ним не так?
Большое спасибо за то, что указали мне правильный путь!