как синхронизировать coredata между устройствами? - PullRequest
1 голос
/ 09 июля 2011

У меня есть приложение для iphone, которое использует coredata для хранения своего содержимого.пользователи часто спрашивают меня, могу ли я предоставить способ синхронизации данных между их мобильными устройствами (ipod / iphone / ipad).На данный момент я понятия не имею, как этого добиться.я нашел zsync, но это, кажется, зависит от версии приложения для OSX (которой у меня нет).Я также читал о новых возможностях синхронизации iclouds, и, похоже, это то, что мне нужно, однако я считаю, что синхронизировать содержимое coredata невозможно, но только текстовое содержимое (например, файлы хранения xml).Это правда?

Другой способ, о котором я думал, - это злоупотребление API-интерфейсом EventKit для синхронизации через предоставленный пользователем календарь.Поскольку мое приложение в основном управляет событиями, которые могут храниться в пользовательском календаре (в дополнение к хранилищу coredata), синхронизация по календарю показалась бы мне полезной.однако я думаю, что синхронизация может прерваться, например, когда пользователь решит не синхронизировать весь календарь, а только как 3 месяца в настройках устройства / настройках учетной записи.

кто-нибудь получил представление о том, каким должен быть мой подход?какие-нибудь советы?

1 Ответ

1 голос
/ 09 июля 2011

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

Синхронизировать устройство с сервера на устройство немного проще, при условии, что у вас уже есть сервер с некоторой формой системы регистрации / входа в систему.Тогда вам просто нужен способ сообщить текущее состояние базы данных на сервер, а затем снова вернуться с сервера на другие устройства.Опять же, для этого требуется немало работы, но, по крайней мере, логика определения того, какие устройства синхронизируются с какими другими устройствами и как они передают данные от одного к другому, все подразумевается в работе сервера.

Что касается iCloud, то программный контент, который вы через него синхронизируете, должен быть получен из UIDocument, поэтому он не поможет вам с общими сущностями базовых данных.

Если вы ищетеготовое решение, которое синхронизирует весь ваш контент Core Data с одного устройства на другое без специального кода, тогда его действительно нет.Самое близкое, что вы можете разумно получить, это отправить весь файл .sqlite, который ваше приложение использует, с одного устройства на другое, перезаписав файл целевых устройств .sqlite.Это прекрасно работает, если ваша синхронизация должна быть только однонаправленной, но, очевидно, не подходит для других случаев использования.Возможно, вы могли бы использовать эту модель с iCloud, если вы можете заставить ее синхронизировать весь файл .sqlite вашего приложения в качестве атомарного объекта.

...