我是一个iOS新手。我有一个选择器方法,如下-
- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{
}
我正在尝试实现像这样的东西-
[self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0];
但这给了我一个错误,说-
Instance method -performSelector:withObject:withObject:afterDelay: not found
你知道我遗漏了什么吗?
发布于 2011-12-09 07:14:39
因为没有[NSObject performSelector:withObject:withObject:afterDelay:]
方法这回事。
您需要将想要发送的数据封装到某个单独的Objective C对象(例如,NSArray、NSDictionary、一些自定义的Objective C类型)中,然后通过众所周知且受人喜爱的[NSObject performSelector:withObject:afterDelay:]
方法将其传递。
例如:
NSArray * arrayOfThingsIWantToPassAlong =
[NSArray arrayWithObjects: @"first", @"second", nil];
[self performSelector:@selector(fooFirstInput:)
withObject:arrayOfThingsIWantToPassAlong
afterDelay:15.0];
发布于 2011-12-09 07:25:09
您可以将参数打包到一个对象中,并使用辅助方法来调用您的原始方法,正如Michael和其他人现在所建议的那样。
另一种选择是dispatch_after,它将获取一个块,并在某个时间将其排队。
double delayInSeconds = 15.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self fooFirstInput:first secondInput:second];
});
或者,正如您已经发现的那样,如果您不需要延迟,可以直接使用- performSelector:withObject:withObject:
发布于 2011-12-09 07:21:27
- (void) callFooWithArray: (NSArray *) inputArray
{
[self fooFirstInput: [inputArray objectAtIndex:0] secondInput: [inputArray objectAtIndex:1]];
}
- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{
}
并使用以下命令调用它:
[self performSelector:@selector(callFooWithArray) withObject:[NSArray arrayWithObjects:@"first", @"second", nil] afterDelay:15.0];
https://stackoverflow.com/questions/8439052
复制相似问题