Я работаю над приложением для iPhone, которое использует базу данных sqlite. Приложение загружает данные из Интернета в фоновом потоке с пользовательским интерфейсом в основном потоке. Поток фоновой загрузки может предварительно выполнить INSERT, UPDATE и SELECT в базе данных. Уровень пользовательского интерфейса также может взаимодействовать с базой данных, выполняя UPDATE и SELECT. Если я не сильно взаимодействую с пользовательским интерфейсом во время загрузки фонового потока, все работает нормально. Однако я начинаю сталкиваться с проблемами, когда во время загрузки выполняется много ОБНОВЛЕНИЙ в основном потоке (UI).
В каждом запросе к базе данных я использую оператор @synchronized, но это не решает проблему. Когда запросы (из пользовательского интерфейса и из фонового потока) выполняются в одно и то же время, это приводит к потере данных. Обновление данных в главном потоке работает также хорошо, как и в фоновом режиме (если они выполняются отдельно друг от друга).
База данных имеет sqlite3_threadsafe () == 2;
Для всех запросов я использую одно соединение, может проблема в этом скрывается?