0

我正在处理一个非常奇怪的情况。我正在我的 iOS 应用程序中实现 Attributed Strings,并且我收到了警告,它们在 iOS 3.2 及更高版本中可用。因为我仍然支持 iPhone 上的 3.1.3,所以我知道我必须弱链接 CoreText,并且可能在使用它们之前进行一些编译时操作系统检查。

我弱链接了框架,但出于好奇,我只是按原样使用该类并在 3.1.3 设备上运行它......它可以工作。我在这里错过了什么,我很困惑为什么这不会崩溃。我 100% 确定这是 3.1.3 设备,但 NSMutableAttributedString 是 3.1.3 上的隐藏类,因此实际上确实可以工作,因为 Objective-c 的动态特性?

4

3 回答 3

1

我是 OHAttributedLabel 类的作者。感谢您使用它!

您的行为很奇怪,因为 OHAttributedLabel 使用 CoreText 框架在屏幕上绘制 NSAttributedStrings。

由于 CoreText 仅在 iOS 3.2 之后才可用,我看不出它如何在 iOS 3.2 下工作,尤其是在 iOS 3.1.3 下……?

于 2011-06-17T19:27:17.500 回答
0

它真的有效,而不仅仅是没有崩溃吗?

根据设置,一个不存在的类变成了 just nil。请注意,在 Objective-C 中,您可以向nil. 然后它只是返回nilor 0。然后[[NSAttibutedString alloc] init]可能会返回nil,而不会崩溃。

于 2011-02-04T14:03:40.183 回答
0

CoreText 是在 iOS 3.2 中引入的。如果你对它进行弱链接,应用程序将启动,但它会在调用 CoreText 函数的第一个实例时崩溃。

为了仍然与早期版本兼容,您可以通过使用 Quartz 绘制文本来弱链接并避免 CT 代码。您将检测设备上是否存在 CT,如果存在则使用它,否则您的绘图将有一个粗略的后备机制。

于 2011-06-19T02:50:18.577 回答