1

まあ、これはかなり奇妙な問題です。(私はそれがしばらくの間ココアとあまり遊んでいない、またはそうでなければ私の何かと関係があることを願っています...)

したがって、問題は非常に簡単です。

  • Xcode 4.3.3を使用しています(非常に単純なテストプロジェクト-10.7 SDK - ARCなし
  • あるクラスにカテゴリを作成しています(例NSProgressIndicator
  • 適切なヘッダーファイルをインクルードしています
  • カテゴリのメソッドのいずれかを使用しようとすると(ただし、使用可能なコマンドのドロップダウンに表示されます)、エラーが発生します:

[NSProgressIndicator start]:認識されないセレクターがインスタンス0x7f9f4b91a0a0に送信されました

コード

(例として-他の(100回テストされた)カテゴリで発生しました):

#import <Foundation/Foundation.h>


@interface NSProgressIndicator (NSProgressIndicator_Functions)

- (void)start;
- (void)stop;

@end

#import "NSProgressIndicator+Functions.h"


@implementation NSProgressIndicator (NSProgressIndicator_Functions)

- (void)start
{
    [self setHidden:NO];
    [self startAnimation:nil];
}

- (void)stop
{
    [self setHidden:YES];
    [self stopAnimation:nil];
}

@end

何か案は?

4

1 に答える 1

5

私のコメントを実際の回答に拡張するには:

カテゴリの実装 (.m) ファイルがターゲットの Compile Sources ビルド フェーズに含まれていることを確認してください。メソッドを追加する NSProgressIndicator にカテゴリがあることをコンパイラに伝えるには、ヘッダーをインポートするだけで十分-startです。カテゴリの実装が実際にコンパイルされ、完成したバイナリにリンクされていない限り (またはメソッドの実装が実行時に追加されるなど)、NSProgressIndicator は実際にstartは実行時にメッセージに応答しません。Objective-C の動的なメッセージ送信動作のため、コンパイル時に NSProgressIndicator が実際にそのメッセージに応答するかどうかをコンパイラが判断する方法はありません。そのため、警告やエラーは発生しません。

于 2012-08-27T14:48:01.123 に答える