2014-01-07 1 views
1

У меня есть приложение Mac Shoebox с UIDocument основано на iOS-аналоге.Приложения iCloud & Shoebox: Как атомизировать синхронизацию пакета файлов?

Я пытаюсь найти оптимальную стратегию для синхронизации данных между Mac и iOS через iCloud.

Я не могу принять NSDocument в приложении Mac (это приложение для обувной коробки без концепции отдельных документов, похожих на альбомы в iTunes).

Мой план для приложения Mac это:

  • магазин каждый элемент в пакете файлов в директории «данных»
  • Использование файла упаковщики написать пакету
  • координации использования файлов для синхронизации чтения/операции записи (синхронизации на "корневой" папке пакета файлов)

Для приложения IOS:

  • Загрузите файл пакеты, приложение Mac, созданные в каталоге данных, UIDocument s
  • Положитесь на UIDocument для координации изменений уведомлений/файла
  • Я не буду использовать папку Documents, потому что я не хочу, пользователю видеть документы в приложении Настройки

Мои вопросы:

  • Как я могу гарантировать, что мои файлы пакетов из Mac синхронизированы через минусы istent путь к iOS? (т. е. изменения в несколько файлов в пакете обрабатываются атомарно как одно изменение)
  • Достаточно ли установить бит «файла» в каталоге (на самом деле я делаю это, экспортируя UTI)?
  • Есть ли способ на самом деле имитировать/проверить это?

ответ

2

Вы находитесь в мире чертов, здесь. Нет никакой волшебной пули для синхронизации пакетов файлов между машинами - слишком много нерешенных проблем, с которыми iCloud синхронизирует glosses. Что происходит, когда половина файлов данных в вашем пакете выписывается, а затем пользователь отключает свой компьютер, а остальные не пишут? Что делать, если основной файл индекса считывается из сети правильно, но сеть выходит из строя, прежде чем загружается какой-либо из файлов данных, к которым он относится?

Насколько я знаю, iCloud ничего не делает для решения этих проблем.

Но, при этом, даже с помощью приложения для обуви я бы (и сделал) использовал NSDocument. Это не очень хорошая работа, чтобы заставить его делать то, что вы хотите, и вы получаете столько материала бесплатно. Например, просто разархивируйте пункты меню «открыть» и «сохранить» из своего основного меню и скажите NSDocumentController открыть файл данных при запуске приложения. Это то, что мы делаем.

+0

Спасибо Wil. Я думал об использовании NSDocument, но это связано с собственными проблемами. Я обнаружил, что в NSDocument существует больше кода пользовательского интерфейса, например, конфликты обработки, отображение сообщений об ошибках и т. Д. Все они используют имя документа, которое в моем случае является уникальной строкой, которая не имеет смысла для пользователя. Кроме того, я обнаружил, что обработка нескольких документов в одном NSWindow является сложной задачей. Сказав это, я дам NSDocument еще один выстрел. – Mark

+0

Вы должны иметь возможность вызвать -setDisplayName: или subclass -displayName, чтобы установить имя в нечто более человечное, например имя вашего приложения. –

+0

Как вы справляетесь с конфликтами версий в пользовательском интерфейсе? Используете ли вы по умолчанию лист предупреждений NSDocument или есть способ его настройки? В моем случае я мог бы прагматично объединить конфликтующие версии в 80% случаев в моем приложении без взаимодействия с пользователем. – Mark