尝试从共享实例启动功能

时间:2012-09-19 08:08:12

标签: iphone objective-c selector

我有一个显示地图的界面实例。 我从其他界面调用该地图并显示它,现在我想在地图界面中启动一个函数(func5)。

我正在创作:

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

我在myMap界面声明了这个func5

-(void) func5:(int) num;

但是在尝试运行此行时出现错误:[map func5:2];

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

问题是什么?

2 个答案:

答案 0 :(得分:1)

您可以发布函数 func5 的声明吗?

正确检查,并在必要时提供必要的参数

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

它们是两个不同的东西,取决于你如何定义你的方法

答案 1 :(得分:1)

首先,将这样的方法放在app委托上是一件可怕的事情,通常你想在自己的实例中使用这些方法。

其次,AppDelegate必须有

- (void)func5; 

在标题中声明(即AppDelegate.h)

从这里的代码我假设“实例”你指的是你的AppDelegate,而不是像* MyMapClass myMap; 那样的东西。

如果它是第二个,那么你必须在app delegate的标题中使myMap成为一个声明的属性,然后以这种方式调用它:

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

并在要调用函数的位置添加标题。

#include AppDelegate.h 

这仍然是一种可怕的做法。