Защита кэша карт от очистки –
решение проблемы оффлайн-карты в iOS 5

В iOS 5 изменился формат MapTiles.sqlitedb – базы данных, в которой хранится кэш карты. Чтобы перекодировать базу данных в новый формат, старые конвертеры не годятся, а новых в интернете нет. Поэтому затея с изготовлением оффлайн-карты для iOS 5 бессмысленна.
Заранее нужный кэш изготовить не получится, и по достижении размера примерно 20 Mb старые тайлы карты будут затираться новыми.

Nick Adams предлагает решение, как кэш карт защитить от стирания. Это не решает проблему с изготовлением нужной карты заранее, зато позволяет сэкономить трафик при просмотре уже кэшированной ранее области карты.
В базе данных создаётся триггер (переключатель), суть работы которого состоит в том, чтобы обнулить выборку строк базы данных, предназначенных для удаления. То есть приложение „Карты“ будет, как всегда, выполнять транзакцию по удалению старых строчек, но по ходу дела выборка окажется нулевой, и из базы ничего не удалится.

Чтобы выполнить эту хитрую операцию, нужно выгрузить из телефона кэш карты, который хранится там по адресу:
/var/mobile/Library/Caches/Maps/MapTiles/MapTiles.sqlitedb
можно воспользоваться DiskAid или другим файловым менеджером, который умеет подсоединяться к айфону.
После этого следует открыть файл базы данных в каком-нибудь приложении, поддерживающем формат SQLite. Я воспользовался SQLite Manager (есть и для Windows, и для OS X).

Здесь создаём новый триггер, который защитит базу данных кэша карт от затирания:
CREATE TRIGGER prevent_delete BEFORE DELETE ON image
BEGIN SELECT raise(IGNORE);
END

Читать далее «Защита кэша карт от очистки - решение проблемы оффлайн-карты в iOS 5»