Могу ли я использовать Uidocument в приложении Mac OSX?
-
26-10-2019 - |
Вопрос
Я хотел бы поделиться общим форматом документа между iOS и OSX. Обратите внимание, что это не приложение MDI; Когда -либо будет один документ для сохранения/загрузки. Управление пользователем NSDOCUMent в стиле (например, сохранение, сохранение, открытие и т. Д.) Не требуется.
Самая большая проблема в том, что, похоже, нет общего формата кодирования документов, естественно совместимых с OSX и iOS (пока). Согласно руководству по программированию приложений на основе документов для iOS, похоже, что между классами, полученными в NSDOCUMent и UIDOCUMENT, требуется преобразование кодирования/декодирования. Я бы хотел, чтобы был универсальный механизм сериализации, совместимый со всеми устройствами в экосистеме Apple. Любые мысли, идеи, советы ценятся в этом отношении.
Могу ли я использовать класс, получаемый Uidocument, в моем приложении Mac OSX, и документ становится совместимым с iOS?
Решение
Нет, вы не можете использовать или подкласс Uidocument в приложении какао, потому что Uidocument не существует в какао.
Как в NSDocument, так и в Uidocument вы определяете формат, который будете использовать. Итак, просто реализуйте их обоих, чтобы использовать один и тот же формат для вывода и ввода.
Было бы не слишком сложно использовать препроцессор для настройки файловой пары, которая реализует подкласс NSDocument при строительстве для Mac и Uidocument при строительстве для iOS. Это помешало бы вам не соответствовать реализациям сериализации и десериализации, поскольку у вас будет только одна копия каждого и использовать ее на обеих платформах.
Другие советы
Ответ Питера выше правильный, но у меня есть предложение, которое не включает в себя предварительный процессор C (не доступный в Swift), который немного более похож на какао.
Посмотрите WWDC 2014 Session 233, чтобы настроить ваши приложения для iOS и Mac в одном проекте в качестве отдельных целей, а затем используйте категории в классе документов для реализации общей функции:
CommonFunctions.h
@interface AppDocument (CommonFunctions)
- (void)function;
@end
-
CommonFunctions.m
@implementation AppDocument (CommonFunctions)
- (void) function {
/// stuff here
}
@end
Ваш AppDocument
Класс будет иметь 2 разных класса, унаследовавших от пользовательского интерфейса/NSDOCUMENT по мере необходимости для каждой платформы/цели, и каждая цель будет привлекать категории из общего места.