Могу ли я использовать UIDocument в приложении Mac OSX? - PullRequest
4 голосов
/ 30 ноября 2011

Я хотел бы поделиться общим форматом документов между iOS и OSX. Обратите внимание, что это не приложение MDI; когда-либо будет один документ для сохранения / загрузки. Управляемое пользователем управление в стиле NSDocument (например, Сохранить, Сохранить как, Открыть и т. Д.) Не требуется.

Самая большая проблема заключается в том, что, похоже, нет единого формата кодирования документов, естественно совместимого с OSX и IOS (пока). Согласно Руководству по программированию приложений на базе документа для iOS, похоже, что преобразование кодирования / декодирования требуется между классами, производными от NSDocument и UIDocument. Хотелось бы, чтобы был универсальный механизм сериализации, совместимый со всеми устройствами в экосистеме Apple. Любые мысли, идеи, советы приветствуются в этом отношении.

Могу ли я использовать производный класс UIDocument в своем приложении Mac OSX, и документ станет совместимым с IOS?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Нет, вы не можете использовать или подкласс UIDocument в приложении Какао, потому что UIDocument не существует в Какао.

В NSDocument и UIDocument вы определяете формат, который будете использовать.Так что, просто реализуйте их оба, чтобы использовать одинаковый формат для вывода и ввода.

Было бы не сложно использовать препроцессор для настройки пары файлов, которая реализует подкласс NSDocument при сборкедля Mac и UIDocument при сборке для iOS.Это предотвратит несоответствие реализаций сериализации и десериализации, поскольку у вас будет только одна копия каждой и вы будете использовать ее на обеих платформах.

1 голос
/ 11 декабря 2014

Ответ Питера выше верен, но у меня есть предположение, что в нем не задействован препроцессор C (недоступный в Swift), который немного более похож на Какао.настройте приложения iOS и Mac в одном проекте в качестве отдельных целей, а затем используйте категории в своем классе документов для реализации общей функциональности:

CommonFunctions.h    

@interface AppDocument (CommonFunctions)
- (void)function;
@end

-

CommonFunctions.m

@implementation AppDocument (CommonFunctions)

- (void) function {
      /// stuff here
}

@end

Ваш AppDocument класс будет иметь 2 разных класса, наследуемых от UI / NSDocument по мере необходимости для каждой платформы / цели, и каждая цель будет тянуть категории из общего места.

...