选择器问题

时间:2009-12-20 18:43:39

标签: iphone iphone-sdk-3.0

我一定误解了什么。我只想使用performSelector:来调用我自己的方法之一。这里我在@interface中有方法声明:

-(void)forceReload;

仅供参考,所有这些代码仅在一种类型上定义。这是方法实现和调用方法:

-(void)forceReload {
    // code here...
}

-(void)entryActivityEditViewControllerDidFinish {

    // etc...

    DebugLog(@"self=%@", self);
    DebugLog(@"responds to selector=%@", [self respondsToSelector:@selector(forceReload:)] ? @"true" : @"false");
    [self forceReload]; // Works fine
    [self performSelector:@selector(forceReload:)]; // unrecognized selector
}

令我感到困惑的是,我可以将消息直接发送到对象,但与performSelector:一起使用时会失败。如果前者的成功意味着后者的成功吗?

为了完善它,这里有一些调试,显示我的目标对象(self)是我认为的类型,并且我正在发送给相应的对象。我还包括对respondsToSelector的调用:并发现我的对象没有响应forceReload:这让我更加困惑。为什么会这样?

0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:236): self=<EntryActivityTableViewController: 0x1259160>
0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:237): responds to selector=false
2009-12-20 10:22:44.999 Workouts[407:207] *** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160
2009-12-20 10:22:45.017 Workouts[407:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160'

请告诉我,我的理解是错误的。 : - )

1 个答案:

答案 0 :(得分:3)

您的方法不带参数,但您的@selector()调用请求一个带有一个参数的选择器。你想要的是这个:

[self performSelector:@selector(forceReload)]; // unrecognized selector