NSAttributedString — совместимость UIKit (iOS) и AppKit (macOS)

У меня есть приложение для iOS и macOS. Эти приложения используют Cloudit для обмена информацией между (основными данными). Я храню NSAttributedString, созданный на одной платформе (например, iOS), в основном атрибуте данных, который определяется как трансформируемый тип атрибута, поэтому основные данные используют (я предполагаю) NSCoder по умолчанию для кодирования/декодирования данных NSAttributedString.

Теперь мое приложение для macOS может считывать данные из iCloud, включая эту NSAttributedString, и просматривать/редактировать их. Но эта NSAttributedString выглядит совершенно по-другому в macOS (и наоборот)

Не только размер (что я понимаю, потому что размер по умолчанию в iOS и macOS отличается, поэтому мне нужно настроить размер), но я потерял форматирование (жирный, курсив и т. д.).

Получается, что атрибуты шрифтов для UIFont и NSFont несовместимы, я прав? Я использую стандартные шрифты - например на iOS UIFont.preferredFont(forTextStyle: .body)

Возможно, мне нужно сохранить NSAttributedString как что-то еще (например, преобразовать его в данные RTF/HTML и поделиться ими таким образом) в iCloud, а во время чтения снова преобразовать RTF/HTML в NSAttributedString. Я не спрашиваю, как это сделать (я это знаю), но я спрашиваю должен ли я это делать, чтобы иметь совместимость с NSAttributedString (по крайней мере, с точки зрения форматирования) на всех используемых платформах.

Я не могу найти ничего по этому поводу в Интернете (может быть, я ищу с неправильными ключевыми словами). Есть ли у кого-нибудь опыт совместного использования NSAttributedString между платформами (iOS, macOS)? Есть ли рекомендации на этот счет?

Спасибо за совет/помощь заранее.


person GrLb71    schedule 23.02.2020    source источник
comment
Вы должны добавить это как ответ и отметить его как принятый, чтобы другие могли видеть, что ваш вопрос решен.   -  person pbasdf    schedule 25.02.2020
comment
Спасибо за подсказку, я здесь новенький (как участник).   -  person GrLb71    schedule 26.02.2020


Ответы (1)


Решение

Наконец я нашел решение. Проблема в том, что UIFont.preferredFont(forTextStyle: .body) возвращает шрифт, который не распознается на платформе macOS. Поэтому macOS вместо использования этих неизвестных шрифтов использовала Times New Roman для простых, полужирных и курсивных вариантов, и именно по этой причине я потерял некоторую информацию о форматировании на пути от iOS к приложению macOS.

Решение простое. Вместо использования стандартного шрифта, возвращаемого

UIFont.preferredFont(forTextStyle: .body)

лучше использовать шрифт, доступный на обеих платформах (например, Arial). Нет необходимости конвертировать NSAttributedString в RTF/HTML и обратно.

person GrLb71    schedule 26.02.2020