0

別のクラスからアクセスできるように、インスタンス メソッドの 1 つをクラス メソッドに変更しました。メソッドは正常に呼び出されましたが、コードに警告が 1 つあります。

  • 不完全な実装 (「@implementation myViewController」行)

私のクラスコードは次のようになります。

//...

@implementation myViewController

#pragma mark - myMethod
+ (void)myMethod:(CustomUIView *)customView didSelectText:(NSString *)text
{
    //...
}

//...

私のクラスヘッダーファイルには、次のものがあります。

#import "CustomUIView.h"

//...

@interface myViewController : CustomUIViewController <CustomUIViewDelegate>
{
    //...
}

//...

@end

おそらく句が原因で、ヘッダーファイルの間違った部分でメソッドを宣言しているに違いないと思いますか? または、私は何か他のものを完全に見逃しています。私はネットをよく見ましたが、私が知る限り、私はプロトコルに従っています。おそらく私のセットアップに特有のものがありますか?

編集:これは私のCustomUIViewヘッダーファイルからの私のプロトコルです:

@class CustomUIView;

@protocol CustomUIViewDelegate <NSObject>

+ (void)myMethod:(CustomUIView *)customView didSelectText:(NSString *)text;
//...
@end
4

2 に答える 2

1

あなたの間違いはメソッドの名前にあります。実装はdidSelectTextで、インターフェースはdidSelectTermです。(Text vs Term -> 明らかに同じはずです) また、[[self class] otherMethod:text];クラスメソッドとして呼び出しますが、よく見るとそうではありません。

于 2012-11-04T14:06:33.997 に答える
0

あなたの変更は意味がありません。

他のクラスからインスタンス メソッドにアクセスできます。クラス メソッドである必要はありません。クラスメソッドは、クラスのインスタンスではなく、クラスによって実装されるメソッドであることを意味します。

次に、新しいクラス メソッド内で、インスタンス メソッドとしてメソッド (otherMethod:) を呼び出しています。つまり、クラスのオブジェクトによって呼び出されるメソッドです。[[self Class] otherMethod:text][self Class] はインスタンス メソッドではなくクラス メソッドの呼び出しに使用されるため、これを呼び出すのは間違っています。メッセージを送信するクラスのオブジェクトへの有効な参照がありません。

たす:

メソッドを実装しました:

+ (void)myMethod:(CustomUIView *)customView didSelectTerm:(NSString *)text;

しかし、あなたのプロトコルは以下を期待しています:

+ (void)termTextClickedOn:(TSAlertView *)customView didSelectTerm:(NSString *)term;

実際のパラメーターに付ける名前は重要ではないため、テキストと用語の違いはカウントされませんが、Objective-C で記述されているメソッド名は次のようになります。

+ myMethod:didSelectTerm:

+ termTextClickedOn:didSelectTerm:

2 つの名前が異なるだけでなく、最初のパラメーターの型も異なります。一方は を取り、CustomUIView *もう一方は を取り、一方がTSAlertView *他方のサブクラスである場合に機能する可能性がありますが、いずれにしても、メソッド名は違う。

于 2012-11-04T14:06:27.273 に答える