NSAttributedString - 兼容性 UIKit (iOS) 和 AppKit (macOS)

NSAttributedString - compatibility UIKit (iOS) and AppKit (macOS)

我有一个适用于 iOS 和 macOS 的应用程序。这些应用程序使用 Cloudit 在(核心数据)之间共享信息。我将在一个平台(例如 iOS)上创建的 NSAttributedString 存储在核心数据属性中,该属性被定义为可转换类型的属性,因此核心数据使用(我假设)默认 NSCoder 到 code/decode NSAttributedString 数据。

现在我的 macOS 应用程序可以从 iCloud 读取数据,包括这个 NSAttributedString 和 view/edit 它们。但是这个 NSAttributedString 在 macOS 上看起来完全不同(反之亦然)

不仅大小(据我所知,因为 iOS 和 macOS 上的默认大小不同 - 所以我需要调整大小)而且我丢失了格式(粗体、斜体等)。

看来 UIFont 和 NSFont 的字体属性不兼容,对吗?我使用的是标准字体 - 例如 iOS UIFont.preferredFont(forTextStyle: .body)

也许我必须将 NSAttributedString 作为其他内容存储(例如将其转换为 RTF/HTML 数据并以这种方式共享)在 iCloud 中,并在读取期间再次将 RTF/HTML 转换为 NSAttributedString。我不是在问如何做到这一点(我知道),而是在问 是否必须这样做 才能在所有使用的平台上兼容 NSAttributedString(至少从格式化的角度来看) .

我在网上找不到任何与此相关的信息(也许我搜索的关键字有误)。有没有人有在平台(iOS、macOS)之间共享 NSAttributedString 的经验? 对此有什么建议吗?

提前感谢advice/help。

解决方案

终于我找到了解决方案。问题是 UIFont.preferredFont(forTextStyle: .body) returns macOS 平台无法识别的字体。因此 macOS 没有使用这种未知字体,而是使用 Times New Roman 来表示普通、粗体和斜体变体,这就是为什么我在从 iOS 到 macOS 应用程序的过程中丢失了一些格式信息的原因。

解决方法很简单。而不是使用

返回的标准字体

UIFont.preferredFont(forTextStyle: .body)

最好使用在两个平台上都可用的字体(例如 Arial)。无需将 NSAttributedString 转换为 RTF/HTML 并返回。