Как включить поддержку iCloud для sqlite? - PullRequest
7 голосов
/ 10 августа 2011

Я хочу обеспечить поддержку iCloud для моей оболочки вокруг sqlite.Не использует coredata.

Интересно, как включить для него iCloud.Содержимое базы данных постоянно меняется (для выставления счетов).Кроме того, если возможно иметь какое-то управление версиями, это будет здорово.

Существуют ли примеры, которые я могу использовать для этого?

Ответы [ 2 ]

7 голосов
/ 15 ноября 2011

Нельзя просто поместить базу данных SQLite в контейнер iCloud, поскольку она может быть повреждена.(При изменении базы данных SQLite временные файлы создаются и переименовываются, поэтому, если процесс синхронизации начнет копировать эти файлы, вы получите поврежденную базу данных.)

Если вы не хотите переходить в CoreДанные, вы можете делать то, что делает Core Data: хранить базу данных в папке с документами и сохранять журнал транзакций в контейнере iCould.Каждый раз, когда вы изменяете базу данных, вы добавляете эти изменения в файл журнала, так что вы можете воспроизводить их и вносить эквивалентные изменения на других устройствах.

Это становится довольно сложным: помимо правильной логики лог / ответвы захотите объединить избыточные изменения и периодически свернуть журнал в полную копию базы данных.

Возможно, вам будет проще разработать решение, если вы сможете использовать знания своего приложения (Core Data должнарешить проблему в общем случае).Например, вы можете сохранять счета в виде отдельных файлов в облачном контейнере (текст, список свойств, XML, JSON и т. Д.), Записывать их при изменении базы данных и импортировать только, если система сообщит вам, что они были созданы или изменены.

Таким образом, вы можете либо перейти на Core Data, либо самостоятельно написать решение для синхронизации.Какой из них лучше, зависит от особенностей вашего приложения.

7 голосов
/ 18 октября 2011

Короткий ответ - нет, вам нужно будет использовать базовые данные, как вы и предполагали. Apple заявила, что sqlite не поддерживается.

Редактировать: ознакомьтесь с разделом iCloud, который теперь есть в Руководстве по программированию приложений для iOS в разделе Использование iCloud совместно с базами данных

Использование iCloud с базой данных SQLite возможно, только если ваше приложение использует Основные данные для управления этой базой данных. Доступ к файлам активной базы данных в iCloud с использованием интерфейсов SQLite не поддерживается и, скорее всего, повредить вашу базу данных. Тем не менее, вы можете создать базовое хранилище данных на основе на SQLite, если вы выполните несколько дополнительных шагов при настройке Основные структуры данных. Вы также можете продолжать использовать другие типы Core Хранилища данных, то есть хранилища, не основанные на SQLite, без каких-либо специальных модификаций.

...