0

地図を表示するインターフェースのインスタンスがあります。私は他のインターフェイスからそのマップを呼び出して表示していますが、マップ インターフェイスで関数 (func5) を開始したいと考えています。

私は作成しています:

myMap *map = (myMap*) [[UIApplication sharedApplication] delegate];
[map func5:2];

これfunc5は myMap インターフェイスで宣言しました。

-(void) func5:(int) num;

しかし、次の行を実行しようとするとエラーが発生します: [map func5:2];

'NSInvalidArgumentException', reason: '-[AppDelegate func5:]: unrecognized selector sent to instance 0x952b140'

何が問題ですか?

4

2 に答える 2

1

関数func5の宣言を投稿できますか?

これを適切にチェックし、必要に応じて必要な引数を提供します

[map func5];  // is how you have called your method
[AppDelegate func5:] // is what your eror has showed with ":" after the function name

それらは2つの異なるものであり、メソッドをどのように定義したかによって異なります

于 2012-09-19T08:10:40.680 に答える
1

まず、アプリのデリゲートにこのようなメソッドを配置するのはひどいことです。通常、これらのメソッドは独自のインスタンスに配置する必要があります。

第二に、AppDelegate は

- (void)func5; 

ヘッダーで宣言されている (つまり、AppDelegate.h)

ここのコードから、「インスタンス」とは AppDelegate を意味し、*MyMapClass myMap;のようなものではないと想定しています。もの。

それが 2 番目の場合、myMap をアプリ デリゲートのヘッダーで宣言されたプロパティにしてから、次のように呼び出す必要があります。

AppDelegate *delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate];
[deletage.myMap func5];

関数を呼び出したい場所にヘッダーを追加します。

#include AppDelegate.h 

それでも、これはひどい習慣です。

于 2012-09-19T08:23:09.277 に答える