Вы не можете просто поместить базу данных SQLite в контейнер iCloud, потому что она может быть повреждена. (При изменении базы данных SQLite создаются и переименовываются временные файлы, поэтому, если процесс синхронизации начнет копирование этих файлов, вы получите поврежденную базу данных.)
Если вы не хотите переходить на Core Data, вы можете сделать то, что делает Core Data: сохранить базу данных в папке документов и сохранить журнал транзакций в контейнере iCould. Каждый раз, когда вы меняете базу данных, вы добавляете эти изменения в файл журнала, чтобы вы могли воспроизводить их и вносить аналогичные изменения на других устройствах.
Это становится довольно сложным: помимо правильной логики журнала/ответа, вы захотите объединить избыточные изменения и периодически сворачивать журнал в полную копию базы данных.
Возможно, вам будет легче разработать решение, если вы сможете использовать знание своего приложения (в общем случае Core Data должен решить проблему). Например, вы можете сохранять счета в виде отдельных файлов в облачном контейнере (текст, список свойств, XML, JSON и т. д.), записывать их по мере изменения базы данных и импортировать только в том случае, если система сообщит вам, что они были созданы или изменены.
Таким образом, вы можете либо перейти на Core Data, либо написать решение для синхронизации самостоятельно. Какой из них лучше, зависит от особенностей вашего приложения.
person
benzado
schedule
15.11.2011