Objective-Cの静的ライブラリのクラス・カテゴリー、オーバーライドメソッドが動作しません

StackOverflow https://stackoverflow.com/questions/1269425

  •  13-09-2019
  •  | 
  •  

質問

私はiphoneのためThree20を使用していると私はメソッドがクラスのカテゴリを使用して、その中で何を変更しようとしています。それは罰金コンパイルが、私はそれにブレークポイントに到達することはありません。

私は、クラス分類は、クラスのすべてのインスタンスに影響を与え仮定しているので、私はそれを動作させるために静的ライブラリを再コンパイルする必要はありません。

また、私はカテゴリに使っているクラスは、私はインターフェイスとコンパイラが失敗したカテゴリを実装したときに、私はクラス名の末尾に「X」を追加するためならば見られていることを知っています。

ここでは、任意の案内が非常に高く評価されます。

役に立ちましたか?

解決

<ストライキ> が指摘されているように>あなたは、iPhone OS 3.0の静的ライブラリにリンクするカテゴリを持つために、アプリケーションの他のリンカフラグに設定する-all_loadオプションが必要になります。 -ObjCは同様にトリックを行う必要があり、それは現在のSDKに取り組んでいない。 Xcodeの4.2でLLVMコンパイラの時点で、彼らはそう、正しく動作から-ObjCの他のリンカ旗を防止するリンカーのバグを修正しましたあなたは、もはや(いくつかの厄介な副作用を有する)-all_load使用する必要はありません。 -ObjCあなたはカテゴリがあなたの静的ライブラリから引かれるために取得する必要があるすべてである必要があります。

私はThree20はすでに場所でこれらのフラグを持っているかもしれないので、それは、最初の場所でアプリケーションを正常にリンクするために設定されるように、これらのリンカのフラグが必要だと思うが、

これは、あなたの問題に貢献している可能性があります。

他のヒント

二つのカテゴリーが同じバイナリに同じクラスの同じメソッドをオーバーライドする場合、

、優先されるオーバーライド定義されていません。最良の結果を得るために、サブクラスを作成し、その上のメソッドをオーバーライドします。 Three20は、Apacheライセンスされているので別の方法として、ライブラリ自体に変更を加えることができます。

私は、3.0 SDKを使用して、デバイスにインストールする場合、静的ライブラリにリンクされて、はい-all_loadフラグが必要なプロジェクトを持っています。 -ObjCは、シミュレータのために必要だったすべてのことだった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top