В моем приложении мне иногда нужно пересобрать и снова заполнить файл базы данных. База данных SQLite создается и управляется стеком 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';
Я никак не могу найти причину этого. Это указывает на две различные проблемы - ошибка 256 Какао указывает, что файл не существует или не читается. Но файл IS , созданный после создания persistenStoreCoordinator, хотя и пуст, но после выполнения некоторых запросов он исчезает.
Второе сообщение, указывающее на попытку создания уже существующей таблицы, довольно странно в этом случае.
Я совершенно сбит с толку и не могу понять, что здесь происходит. Мой код выглядит так:
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]);
После выполнения этого кода файл БД существует, но он пуст. Когда затем выполняется первый запрос (и все последующие), он выдает ошибку, указанную выше, и файл исчезает.
Кто-нибудь знает, что с ним не так?
Большое спасибо, что указали мне правильный путь!