NSAttributedString - совместимость UIKit (iOS) и AppKit (macOS) - PullRequest
1 голос
/ 23 февраля 2020

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 26 февраля 2020

Решение

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

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

UIFont.preferredFont(forTextStyle: .body)

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

...