0

私は非常に奇妙な状況に対処しています。属性付き文字列を iOS アプリケーションに実装していますが、iOS 3.2 以降で使用できるという警告が表示されました。私はまだ iPhone で 3.1.3 をサポートしているので、CoreText を弱くリンクする必要があることはわかっていました。おそらく、それらを使用する前にコンパイル時に OS をチェックする必要があります。

フレームワークを弱くリンクしましたが、好奇心からクラスをそのまま使用し、3.1.3 デバイスで実行したところ...動作しました。ここで何が欠けているのか、なぜこれがクラッシュしないのか混乱しています。これは 3.1.3 デバイスであると 100% 確信していますが、 NSMutableAttributedString は 3.1.3 の隠しクラスなので、実際には object-c の動的な性質のために機能しますか?

4

3 に答える 3

1

私はOHAttributedLabelクラスの作成者です。ご利用いただきありがとうございます!

OHAttributedLabelはCoreTextフレームワークを使用して画面上にNSAttributedStringsを描画するため、動作は奇妙です。

CoreTextはiOS3.2以降でのみ利用可能であるため、これがiOS 3.2、特にiOS 3.1.3でどのように機能するかわかりません…?

于 2011-06-17T19:27:17.500 に答える
0

CoreText は iOS 3.2 で導入されました。それに対して弱いリンクを設定すると、アプリは起動しますが、CoreText 関数の呼び出し時に最初のインスタンスでクラッシュします。

以前のバージョンとの互換性を維持するために、代わりに Quartz でテキストを描画することで、CT コードを弱くリンクして回避することができます。デバイスに CT が存在するかどうかを検出し、存在する場合はそれを使用します。そうでない場合は、図面に対して大まかなフォールバック メカニズムが使用されます。

于 2011-06-19T02:50:18.577 に答える
0

クラッシュしないだけでなく、本当に機能しましたか?

設定によっては、存在しないクラスがちょうど になりnilます。Objective-C では、 にメッセージを送信できることに注意してくださいnilnilその後、 orを返すだけ0です。その後、クラッシュせず に を[[NSAttibutedString alloc] init]返すだけかもしれません。nil

于 2011-02-04T14:03:40.183 に答える