Как включить поддержку iCloud для sqlite?

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

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

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


person mamcx    schedule 09.08.2011    source источник


Ответы (2)


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

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

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

person kris    schedule 17.10.2011

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

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

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

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

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

person benzado    schedule 15.11.2011