4

UIView、MyViewのサブクラスがあります。UIView+simpleCategory という UIView のカテゴリもあります。

このカテゴリはメソッド doSomething を宣言します

@interface UIView (simpleCategory)

- (void) doSomething;

@end

UIView サブクラス MyView から doSomething メソッドを呼び出すのに問題があります。「セレクターが認識されません」というエラーが表示されます。サブクラスにそのスーパークラスのカテゴリメソッドを認識させるために何をする必要があるのか​​ 疑問に思っていました.

UIView サブクラスのインスタンスで UIView カテゴリ メソッドを呼び出すと、問題が発生します。

MyView *view = [[MyView alloc] init];
[view doSomething];        // throws selector not found error here

どこかに #import がないのではないかと思っていますが、カテゴリとサブクラスの関係を理解し​​たいと思います。

ソリューション ::

どうやら私の実装は問題ありませんでした。カテゴリをアプリ ターゲットに追加する必要がありました。これは、Project Navigator でカテゴリをクリックして行いました。次に、Utilities View (ウィンドウの右側からスライドして表示されるビュー) をクリックし、File Inspector メニューの [Target Membership] チェックボックスをオンにしました。必要な作業はこれだけでした。回答ありがとうございます。

4

2 に答える 2

5

あなたのプロジェクトは、UIView カテゴリを宣言するヘッダー ファイルを見つけています。そうしないと、コンパイル時に警告が表示されます。

しかし、実行時には、カテゴリ メソッドが見つかりません。UIView カテゴリの実装ファイルをチェックして、どのターゲットに入るかを確認してください。主なターゲットには含まれていないと思います。

于 2012-09-24T00:43:43.503 に答える
2

さて、これをテストするために私がしたことは次のとおりです。

カテゴリ:

@interface UIView (simpleCategory)

-(void)doSomething;

@end

@implementation UIView (simpleCategory)

-(void)doSomething {
    NSLog(@"Doing something");
}

カテゴリをインポートする以外にコードを追加しない UIView サブクラス MyView を作成しました。

#import <UIKit/UIKit.h>
#import "UIView+simpleCategory.h"

@interface MyView : UIView

@end

次に、ビュー コントローラーの viewDidLoad メソッドで:

MyView *view = [[MyView alloc] init];
[view doSomething];
于 2012-09-24T00:22:57.593 に答える