Objective-Cのカテゴリーのインポート奇妙な行動
-
11-09-2019 - |
質問
私は外部のライブラリからクラスを拡張しています。ここに私のコードは次のとおりです。
ヘッダ・ファイル:マネージャ+ MyCategory.h
#import "Manager.h"
#import "Element.h"
@interface Manager (myCategory)
- (Element*) elementWithTag:(NSInteger)tag;
@end
実装ファイル:マネージャ+ MyCategory.hファイル
@implementation Manager (myCategory)
- (Element*) elementWithTag:(NSInteger)tag {
...
}
@end
さて、ここで私は、このカテゴリを使用する方法である。
#import "Manager+MyCategory.h"
@implementation myClass
- (void) myFunction:(NSInteger)tag {
Manager* myManager = [[Manager alloc] init];
Element* = [myManager elementWithTag:tag];
...
[myManager release];
}
@end
私はコンパイルするとき、私は何の警告を持っていませんが、私は私のプログラムを実行すると、私は次のエラーを取得する:
*** -[Manager elementWithTag:]: unrecognized selector sent to instance 0x105d9a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Manager elementWithTag:]:
ヘッダ・ファイル(つまり、マネージャー+ MyCategory.h)正しくインポートが、実装ファイルとのリンクが行われていないように見えています。 私は私のクラスでは、 "メートル** **マネージャー+ MyCategory" は#importで "時間** **マネージャー+ MyCategory" の#importを交換する場合には、正しく動作しています。
誰もが、私が忘れてしまったものを私に説明できますか?おかげ
解決
カテゴリーは、伝統的なUnixの静的のライブラリとうまく動作しません。
それはあなたのケースだ場合は、、リンカに-ObjCオプションを渡しても問題が解決しているようです。
それをすべて説明する他のヒント
私はあなたがXcodeでapprorpriateターゲットにマネージャー+ MyCategory.mを追加するために忘れてしまったと思われます。すべてのシンボルが存在するので、あなたは、リンカエラーを取得しないと、あなたは適切なヘッダファイルが含まれているので、何のコンパイラの警告はありませんが、実行時にelementWithTag:
メソッドの実装が欠落している。
謝罪は、コメントとしてこれを追加することができませんでした...
ただ、テストのために、あなたは、にextern C関数ヘッダで宣言され、.mファイルに実装を追加することができます。あなたは、テストコード内でこのC関数を呼び出す場合、これは による、未解決の識別子にリンカエラーが発生します。
これは、即座にフィードバックを提供するので、それが簡単に問題を調査するために作ることができると、ファイルが含まれていない理由についてのいくつかの追加の手がかりを生成することがあります。
、時間枠を考えると、私はあなたがこれをやったと仮定しますが、念のために...あなたは目標を掃除したことを確認して、XCodeのをシャットダウンして、再オープン。私はメモリ内で破損したプロジェクトファイルを持っていたし、妙に行動しました。
バーニー
私はこの問題を持っています。
私は別々の.mと.hのに私のカテゴリ定義を分離する必要がありました修正するには - Xcodeの3実装とインタフェースが.hの中にいると大丈夫に見えた...しかし、ああ何うるさいのXcode 4は、むしろ肛門のではありません<。 / P>