В моем приложении для iPhone я хочу сделать резервную копию / восстановить / удалить некоторые данные в / из SQLite3, но у меня возникла проблема с раздражением.
Если я выполню чистую сборку приложения, оно успешно заберет мои данные, поместит их в БД и затем удалит при необходимости (БД используется для резервного копирования данных перед отправкой на сервер, а затем удаления после завершения передачи). ).
НО, после этого первого раунда (я нажимаю кнопку «домой» и снова строю / отлаживаю), БД по какой-то причине блокируется? Я использую sqlite_exec для выполнения запросов INSERT и DELETE, поэтому человеческая ошибка должна быть минимальной, верно?
Ниже приведен код, который я использую (и да, я знаю, что sql stmt ужасен):
//SAVING
-(void)gemRegIDb:(Registrering *)reg
{
//SAVE REGISTRATION TO DB
sqlite3 *db = [[FotoDokAppDelegate shared] database];
char *err;
NSString *sql = [NSString stringWithFormat:@"INSERT INTO Registrering (regId, imagePath, name, date, sentCount, status,igang, latStr, lngStr, brugerID, projektID, felter, harGPS, tempBilledeNavn) Values('%@','%@','%@','%@','%i','%@','%i','%@','%@','%@','%@','%@','%i','%@');",reg.regId,reg.imagePath,reg.name,reg.date,reg.sentCount,reg.status,reg.igang,reg.latStr,reg.lngStr,reg.brugerID,reg.projektID,reg.felter,reg.harGPS,reg.tempBilledeNavn];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
NSLog(@"Noget gik galt i GEM REGISTRERING TIL DB.");
}
}
//DELETING:
-(void)sletRegFraDb:(Registrering *)reg
{
//DELETE REGISTRATION FORM DB
sqlite3 *db = [[FotoDokAppDelegate shared] database];
char *err;
NSString *sql = [NSString stringWithFormat:@"DELETE FROM Registrering WHERE regId ='%@'",reg.regId];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
NSLog(@"Noget gik galt i SLET REGISTRERING TIL DB.");
}
}
После второго запуска переменная err = = "база данных заблокирована".
РЕДАКТИРОВАТЬ: я думал, что удаление выхода (0); и вставив некоторые sqlite3_close (дБ); в некоторых местах работал, но это не так: (
Поток моей проблемы:
- Открыть приложение
- Делать вещи
- Приложение выполняет резервное копирование данных в БД
- Приложение отправляет данные на сервер, а затем удаляет из БД.
- Это работает, но если я убью приложение и снова отладлю, база данных будет заблокирована.
- Приложение может читать содержимое базы данных, но записи заблокированы.
- Единственное решение - удалить приложение из симулятора и переустановить его.
Кто-нибудь может мне помочь?