【问题标题】:NSMutableAttributedString on iOS 3.1.3iOS 3.1.3 上的 NSMutableAttributedString
【发布时间】:2011-02-04 13:54:39
【问题描述】:
我正在处理一个非常奇怪的情况。我在我的 iOS 应用程序中实现了 Attributed Strings,并且我收到了警告,它们在 iOS 3.2 及更高版本中可用。因为我仍然支持 iPhone 上的 3.1.3,所以我知道我必须弱链接 CoreText,并且可能在使用它们之前进行一些编译时操作系统检查。
我弱链接了框架,但出于好奇,我只是按原样使用该类并在 3.1.3 设备上运行它......它可以工作。我在这里错过了什么,我很困惑为什么这不会崩溃。我 100% 确定这是一个 3.1.3 设备,但 NSMutableAttributedString 是 3.1.3 上的一个隐藏类,因此由于 Objective-c 的动态特性而实际上可以工作吗?
【问题讨论】:
标签:
iphone
objective-c
ios
iphone-sdk-3.0
nsattributedstring
【解决方案1】:
我是 OHAttributedLabel 类的作者。
感谢您使用它!
您的行为很奇怪,因为 OHAttributedLabel 使用 CoreText 框架在屏幕上绘制 NSAttributedStrings。
由于 CoreText 仅在 iOS 3.2 之后才可用,我看不出它如何在 iOS 3.2 下工作,尤其是 iOS 3.1.3...?
【解决方案2】:
它真的有效吗,而不是没有崩溃?
根据设置,不存在的类将变为 nil。请注意,在 Objective-C 中,您可以向nil 发送消息。然后它只返回nil 或0。然后[[NSAttibutedString alloc] init] 可能只是返回nil,而不会崩溃。
【讨论】:
-
我应该提供以下信息,我具体要做的是创建一个 OHAttributedLabel,(来自 AliSoftware @github.com/AliSoftware/OHAttributedLabel)这个 UILabel 子类使用 NSAttributedStrings。我创建了一个 NSMutableAttributedString,创建了一个 OHAttributedLabel,并将其 NSAttributedString 属性设置为所述属性字符串。它是否遵循,即使设备不知道 NSAttributedString 是什么,用 NSAttributedString 属性实例化一个对象也会起作用? ...我所说的“工作”是指不崩溃
【解决方案3】:
CoreText 是在 iOS 3.2 中引入的。如果你对它进行弱链接,应用程序将启动,但它会在调用 CoreText 函数的第一个实例时崩溃。
为了仍然与早期版本兼容,您可以通过使用 Quartz 绘制文本来弱链接并避免 CT 代码。您将检测设备上是否存在 CT,如果存在则使用它,否则您的绘图将有一个粗略的后备机制。