протокол слияния основных данных iCloud - PullRequest
20 голосов
/ 17 января 2012

Мне удалось заставить мое существующее приложение с основными данными работать с iCloud.После нескольких дней учебы все стало на удивление просто.Кажется, что необходимы 3 вещи:

  • , чтобы добавить файл разрешений (в недавнем XCode это можно сделать, выбрав цель, выберите «Область сводок», прокрутите вниз, проверьтевключить разрешения "

  • , чтобы добавить правильные параметры при добавлении постоянного хранилища, в моем случае

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
        // other options
        @"<arbitrary name>", NSPersistentStoreUbiquitousContentNameKey,
        iCloudURL, NSPersistentStoreUbiquitousContentURLKey,
        nil]
    

    , где

    NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
    

Здесь `nil 'указывает, что используется информация из файла Entitlements.plist.

  • включение поддержки iCloud для приложения через портал разработчика. Это может включать создание уникального идентификатора приложениячто-то, чего я раньше не делал.

На самом деле, на данный момент я не уверен, что этот последний шаг важен для разработки - я включил другое приложение без этого последнего шага, и кажется,на работу.

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

Один из способов синхронизации данных с устройства A на B - удалить существующую базу данных основных данных на B, а затем перезапустить приложение на B. Однако это не является правильным слиянием.

Кто-нибудь знает способ объединения двух существующих баз данных основных данных в разных приложениях в момент обновления приложений для использования поддержки iCloud, т. Е. Использования указанных выше параметров и всего такого?

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Может быть, это поможет: https://gist.github.com/1475162 ( @ steipete )

1 голос
/ 03 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...