iOS 3.1.3上的NSMutableAttributedString

时间:2011-02-04 13:54:40

标签: iphone objective-c ios iphone-sdk-3.0 nsattributedstring

我正处理一个非常奇怪的情况。我正在将Attributed Strings实现到我的iOS应用程序中,并且我发出警告,因为它们可用于iOS 3.2及更高版本。因为我仍然支持iPhone上的3.1.3,所以我知道我必须弱化链接CoreText,并且在使用之前可能需要编译时编译OS。

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

3 个答案:

答案 0 :(得分:1)

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

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

由于CoreText仅在iOS 3.2之后可用,我无法看到它如何在iOS 3.2下工作,尤其是iOS 3.1.3 ......

答案 1 :(得分:0)

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

根据设置,不存在的类只会变为nil。请注意,在Objective-C中,您可以向nil发送消息。然后它只返回nil0。然后[[NSAttibutedString alloc] init]可能会返回nil,而不会崩溃。

答案 2 :(得分:0)

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

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