2011-02-04 70 views
0

我正在處理非常奇怪的情況。我在我的iOS應用程序中實現了Attributed Strings,並且我警告說他們可用的是iOS 3.2及更高版本。因爲我仍然支持iPhone上的3.1.3版本,所以我知道我必須弱連接CoreText,並且在使用它之前可能需要一些編譯時操作系統檢查。iOS 3.1.3上的NSMutableAttributedString

我弱的聯繫框架,但出於好奇心,我只是使用類,並在3.1.3設備上運行它......它的工作原理。我在這裏錯過了什麼,我很困惑,爲什麼這不會崩潰。我100%確定這是一個3.1.3設備,但在3.1.3上是NSMutableAttributedString一個隱藏類,因此實際上是因爲objective-c的動態特性而工作的?

回答

0

它真的工作,而不是隻是沒有崩潰?

根據設置,不存在的班級變成nil。請注意,在Objective-C中,您可以發送消息給nil。然後它只返回nil0。然後[[NSAttibutedString alloc] init]可能只是返回nil,而不會崩潰。

+0

我應該提供以下一塊信息,就是我專門做的是(從AliSoftware @ https://github.com/AliSoftware/OHAttributedLabel)創建OHAttributedLabel, 本的UILabel子類使用NSAttributedStrings。我創建了一個NSMutableAttributedString,創建了一個OHAttributedLabel,並將它的NSAttributedString屬性設置爲所述屬性字符串。 它是否遵循,即使設備不知道NSAttributedString是什麼,使用NSAttributedString屬性實例化一個對象會起作用? ...和'工作'我的意思是不會崩潰 – rrenna 2011-02-04 19:40:48

1

我是OHAttributedLabel類的作者。 感謝您使用它!

您的行爲很奇怪,因爲OHAttributedLabel使用CoreText框架在屏幕上繪製NSAttributedStrings。

由於CoreText僅適用於iOS 3.2以上版本,因此我無法瞭解它如何在iOS 3.2下工作,尤其是iOS 3.1.3 ...?

0

CoreText是在iOS 3.2中引入的。如果你的鏈接很弱,應用程序將會啓動,但是它會在第一次調用CoreText函數時崩潰。

要繼續與早期版本兼容,您可以通過使用Quartz繪製文本來避免錯誤鏈接並避免使用CT代碼。您會檢測設備上是否存在CT,如果是,則使用它,否則您的繪圖會有粗糙的回退機制。

相關問題