Синхронизировать основные данные между устройствами iOS через Wi-Fi?

Я хочу синхронизировать основные данные между устройствами iOS через Wi-Fi. Я знаю, как установить соединение с ASyncSockets, но не уверен в следующем шаге - синхронизации основных данных.

Я знаю о проекте ZSync для синхронизации между iOS и Mac, но мне было интересно, знает ли кто-нибудь, можно ли делать то же самое между устройствами iOS.


person Andrew    schedule 01.02.2013    source источник


Ответы (2)


Вы можете решить эту проблему несколькими способами, но я бы рассмотрел один из этих двух:

  1. Возьмите свойства подкласса NSManagedObject, преобразуйте их в NSData и используйте AsyncSocket для их передачи. Затем, когда принимающее приложение получило все свойства, оно воссоздает объект в своей собственной базе данных.

  2. Перенесите всю базу данных сразу. Не нужно ничего воссоздавать.

Преимущество первого варианта состоит в том, что он отправляет только то, что ему нужно. Если у вас есть тысячи объектов, и вы меняете один, вы переносите только этот один объект. С другой стороны, все может стать действительно сложным, если у вас есть несколько отношений на этом одном объекте, так как вам также придется отправлять связанные объекты.

Второй вариант для вас самый простой, но не очень эффективный. Если вы изменяете один объект, вы отправляете всю базу данных. Если размер вашей базы данных составляет несколько мегабайт, это может занять некоторое время, и вы делаете это каждый раз, когда вносите изменения.

В идеале вы делаете это так, как это делает iCloud. Толкайте / вытягивайте только то, что изменилось. Я не знаю, как это определяет iCloud, но держу пари, что это не что-то тривиальное. Какой из методов лучше всего подойдет вам, зависит от размера вашей базы данных и от того, как часто изменяются объекты. Метод 2 лучше всего подходит для большой сложной базы данных с небольшими изменениями, метод 1 - если ваша база данных относительно проста (нет или мало связей) и претерпевает много изменений.

person Scott Berrevoets    schedule 02.02.2013

Если вы можете выходить в Интернет, я бы определенно выбрал iCloud, который справится с этим за вас эффективным способом. Если ваше приложение должно работать только с Wi-Fi, возможно, вы сможете заново реализовать то же поведение iCloud. Как это работает, описано в документе Использование основных данных с примечаниями по программированию iCloud:

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

person Andrea Cremaschi    schedule 02.02.2013