-1

私の質問は、1つのパラメーターを持つメソッドでは問題なく機能するが、2つのパラメーターでは機能しない場合についてです。このコードは、Appleアニメーションのサンプルコードからのものです。

メインビューオブジェクト(self)には、抽象スーパークラスオブジェクトsへの読み取り専用参照があります。

次のように、スーパークラスから継承するインスタンスのメソッドを呼び出すことができます。

[self.s myMethod:param1];

そしてそれはうまくいきます。

しかし、私が試してみると:

[self.s anotherMethod:param1 secondParam:param2];

コンパイルエラーが発生します:

セマンティックの問題>インスタンスメソッド'-anotherMethod:secondParam:'が見つかりません(戻りタイプのデフォルトは' id')

どちらのメソッドにもリターンタイプ-(void)があります。

最初のケースと2番目のケースでは、すべてが同じ方法で宣言および定義されます。

任意の提案をいただければ幸いです。

(パラメーターを1つのオブジェクトにまとめることに頼りたくありません!)


以下に例を追加した修正

スーパークラスおよび継承クラスの.hファイルでのこのような宣言

スーパークラスの場合:

@interface SuperClass : NSObject
{
...
}
...
- (void) myMethod:(SomeObject *) param1;
- (void) anotherMethod:(SomeObject *) param1: (int) param2;
@end

継承されたクラスの場合:

#import "SuperClass.h"
@interface InheritedClass : SuperClass
{
...
}
...
- (void) myMethod:(SomeObject *) param1;
- (void) anotherMethod:(SomeObject *) param1: (int) param2;
@end

各クラスの.mファイルの実装

これを継承されたクラスの.mファイルに追加しようとしました。

@interface InheritedClass ()
- (void) anotherMethod:(SomeObject *) param1: (int) param2;
@end
4

1 に答える 1

1

この呼び出し:

[self.s anotherMethod:param1 secondParam:param2];

...メソッド名が。であることを意味しますanotherMethod:secondParam:

この宣言:

- (void) anotherMethod:(SomeObject *) param1: (int) param2;

...同じ名前ではありません。

あなたが言うつもりだった可能性はありますか?

- (void) anotherMethod:(SomeObject *)param1 secondParam:(int)param2;

于 2012-07-10T05:53:02.613 に答える