Обрабатывает ли UIManagedDocument конфликты

Обрабатывает ли UIManagedDocument конфликты на уровне строк для меня или мне нужно их обрабатывать, и его ответ заключался в том, что он обрабатывает конфликты на уровне строк. Может быть, я неправильно его понял, но я этого не вижу.

Итак, я собираюсь задать несколько ключевых вопросов в надежде получить здесь некоторые разъяснения, опять же, это UIManagedDocument.

Если у меня есть таблица Author с полями имени и фамилии, что произойдет, если: A) У меня есть строка с автором: «Джон До» - она ​​синхронизирована с двумя устройствами. Затем я редактирую имя на одном устройстве с «Джон» на «Джон», а фамилию на другом устройстве редактирую с «До» на «Доу». Как с этим справятся iCloud и UIManagedDocument? Получу ли я какое-то уведомление, на которое мне нужно ответить, чтобы разрешить конфликт? Я попробовал следующий код, но я никогда не получаю уведомление:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_ondocumentStateChangedNotification:) name:UIDocumentStateChangedNotification object:self.openedDoc];

Б) Что, если я добавлю другого автора к двум устройствам, чтобы теперь было две строки, которые нужно объединить, UIManagedDocument обработает это для меня или мне нужно будет что-то сделать самому? Если мне нужно сделать что-то самому, что мне нужно сделать? Я попытался подписаться на NSPersistentStoreDidImportUbiquitousContentChangesNotification, но, похоже, мне это тоже не помогло. Против какого контекста я могу подписаться? Я пробовал это:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_onPersistentStoreDidImportUbiquitousContentChanges:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotificationobject:self.openedCaddy.managedObjectContext.parentContext];

Также мне нужно самостоятельно обрабатывать NSManagedObjectContextDidSaveNotification для UIManagedDocument или UIManagedDocument обрабатывает это для меня?

Любая помощь очень ценится, я действительно борюсь здесь. Я внедрил iCloud и UIManagedDocument при запуске iOS 5 и покопался, несмотря на отсутствие документации, но сумел выпустить продукт, но теперь я хочу, чтобы iCloud действительно работал, а не просто подход к синхронизации документов.


person dtrotzjr    schedule 26.08.2013    source источник


Ответы (1)


Я понял. UIManagedDocument обрабатывает конфликты на уровне строк.

Причина, по которой я никогда не видел уведомлений name:NSPersistentStoreDidImportUbiquitousContentChangesNotificationobject, заключается в том, что я неправильно устанавливал параметры постоянного хранилища moc. Чтобы основные данные начали синхронизироваться, необходимо установить как минимум следующие параметры: NSPersistentStoreUbiquitousContentNameKey и NSPersistentStoreUbiquitousContentURLKey.

Когда я впервые начал использовать iCloud 2 года назад, я всегда предполагал, что вызов setUbiquitous:itemAtURL:destinationURL:error: сделал это для меня и был эквивалентен, но это не так. setUbiquitous:itemAtURL:destinationURL:error: просто сообщает iCloud синхронизировать файлы по этому URL-адресу, он ничего не делает с основными данными — вспомните Dropbox. Чтобы синхронизировать основную часть данных UIManagedDocument, необходимо установить эти два параметра.

Я запустил репозиторий на github, который проясняет некоторые из этих вопросов и значительно упрощает работу с UIManagedDocument. http://github.com/dtrotzjr/APManagedDocument

Надеюсь, это поможет кому-то еще. Я чувствую себя довольно глупо, не осознавая этого раньше, но когда я впервые внедрил синхронизацию iCloud для iOS 5 2 года назад, документация была скудной, а iCloud работал не очень хорошо, поэтому я предположил, что мое поведение было нормальным.

person dtrotzjr    schedule 05.09.2013