Objective-C performSelector不调用带参数的方法

时间:2010-06-20 11:15:27

标签: iphone objective-c

我遇到了performSelector的问题。如果我调用一个没有参数的方法,它就可以工作,但如果我传递一个参数,它甚至都不会调用该方法。

示例:

- (void)test
{
 NSLog(@"test"); //it works!!
}    
...
[self performSelector:@selector(test) withObject:nil afterDelay:1.0];


- (void)switchOn:(NSNumber *) index
{
 NSLog(@"switchOn"); //it doesn't work :-(
}   
....
NSLog(@"int is %d", [((NSNumber *)obj) intValue]); //print the correct value
[self performSelector:@selector(switchOn:) withObject:obj afterDelay:1.0];

我也没有错。哪里可能是问题?

感谢

3 个答案:

答案 0 :(得分:3)

switchOn:selector的参数类型是什么?

必须属于 id ,否则performSelector:WithObject:将无效。引用文档:

  

aSelector应标识采用类型为id 的单个参数的方法。对于其他参数类型和返回值的方法,请使用 NSInvocation

答案 1 :(得分:2)

performSelectorWithObject:使用您提供的对象作为第一个参数向选择器发送一条消息。接收方法必须接受id类型的单个参数。其他任何使用NSInvocation。

您可能需要查看similar question有关此内容的信息。

答案 2 :(得分:0)

尝试使用:

- (void)switchOn:(id)index