Помощь с удаленным обновлением базы данных sqlite - PullRequest
0 голосов
/ 28 февраля 2011

Я написал код, который удаленно обновляет базу данных sqlite в моем приложении для iPhone. После загрузки и сохранения новой базы данных она заменяет старую с помощью [NSFileManager removeItemAtPath: DBPath] и [NSFileManager copyItemAtPath: newDBTempPath to: DBPath] . Все эти операции проходят гладко.

Однако, когда я впоследствии открываю новую базу данных, не закрывая приложение, и запускаю запрос, я иногда получаю только 1 результат (первый из 807, который я ожидаю), а иногда ни один. Запрос выполняется без каких-либо ошибок. Затем, когда я закрываю (закрываю) приложение и снова открываю, тот же запрос возвращает мне мои 807 результатов . Это происходит как на симуляторе, так и на реальном iPhone.

Что я мог делать не так?

Спасибо!

ОБНОВЛЕНИЕ 1: Произошла ошибка в моем программировании. Теперь, когда я открываю только что скопированную базу данных в Navicat, я получаю сообщение об ошибке, поэтому при загрузке происходит что-то не так.

ОБНОВЛЕНИЕ 2: Исправлено! Чтобы сэкономить память, я записал каждый загруженный блок размером 100 КБ в файл, но забыл записать последний блок, когда NSURLConnection был закончен. Это приводит к неполному файлу, DOH!

1 Ответ

0 голосов
/ 28 февраля 2011

Вы абсолютно уверены, что база данных вашего приложения закрыта при ее замене? Если вы дотронетесь до файла, пока он открыт, вы запутаете его, возможно, окончательно. Это удваивается, если журнал был открыт в то время (это файл, который будет периодически появляться рядом с файлом базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...