2013-07-31 6 views
1

Я начинаю с создания приложения iOS, которое будет использовать основные данные и синхронизирует его данные с другими устройствами через iCloud. Я подумывал дать кнопку «Синхронизация», чтобы данные не изменялись в случайные моменты по данным iCloud. Тогда возникнет следующая ситуация: -icloud core data sync

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

  1. Может метод mergeChangesFromContextDidSaveNotification вставить эти две записи после нажатия кнопки Синхронизация нажал? (Я думаю, что это возможно. Однако просто хочу подтвердить, прежде чем продолжить работу с этой моделью)
  2. Возможно ли получить доступ к свойствам этих двух объектов, прежде чем вставлять их в базу данных устройства B?

ответ

3

Я не думаю, что iCloud предназначен для вашего использования. iCloud синхронизирует данные между устройствами для того же пользователя, то есть тот, который входит в систему с тем же идентификатором Apple, что и на нескольких устройствах. Идея заключается в том, что когда пользователь открывает приложение на другом устройстве, он может продолжить работу с данными, которые он создал/модифицировал на другом устройстве раньше.

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

Вместо этого вы можете разработать индивидуальное решение на основе собственного сервера и схемы данных.

+0

Спасибо за ответ. Предполагая, что один и тот же пользователь пытается нажать кнопку синхронизации для устройства B, можно ли получить доступ к свойствам этих двух объектов, прежде чем вставлять их в базу данных? – Max

+0

Ваш вопрос не имеет смысла. Нет двух объектов. iCloud синхронизирует, когда вы сохраняете базу данных. Соответствующий объект на другом устройстве затем обновится. – Mundi

0

Поскольку вы используете iCloud с базовыми данными - нет, вы не можете сделать ничего подобного. Когда iCloud синхронизирует изменения основных данных, он делает это в фоновом режиме. Он загружает изменения, сохраняет их в хранилище данных, а затем после того, как он сделан, он рассказывает вам об изменениях, которые уже произошли. Вызов mergeChangesFromContextDidSaveNotification не сохраняет изменения - они уже сохранены. Этот вызов вызывает обновление контекста управляемого объекта с помощью новых данных из постоянного хранилища. После того, как они уже появились, вы получаете уведомление о новых вставках. Подумайте об уведомлении «сделать импорт», как если бы это было сообщение «действительно сохранить» из другого потока, сообщая вам о чем-то, что уже завершено.

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

Смежные вопросы