首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iOS -如何使用多个参数和afterDelay实现performSelector?

iOS -如何使用多个参数和afterDelay实现performSelector?
EN

Stack Overflow用户
提问于 2011-12-09 07:11:23
回答 8查看 96.8K关注 0票数 91

我是一个iOS新手。我有一个选择器方法,如下-

代码语言:javascript
复制
- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{

}

我正在尝试实现像这样的东西-

代码语言:javascript
复制
[self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0];

但这给了我一个错误,说-

代码语言:javascript
复制
Instance method -performSelector:withObject:withObject:afterDelay: not found

你知道我遗漏了什么吗?

EN

回答 8

Stack Overflow用户

发布于 2011-12-09 07:14:39

因为没有[NSObject performSelector:withObject:withObject:afterDelay:]方法这回事。

您需要将想要发送的数据封装到某个单独的Objective C对象(例如,NSArray、NSDictionary、一些自定义的Objective C类型)中,然后通过众所周知且受人喜爱的[NSObject performSelector:withObject:afterDelay:]方法将其传递。

例如:

代码语言:javascript
复制
NSArray * arrayOfThingsIWantToPassAlong = 
    [NSArray arrayWithObjects: @"first", @"second", nil];

[self performSelector:@selector(fooFirstInput:) 
           withObject:arrayOfThingsIWantToPassAlong  
           afterDelay:15.0];
票数 97
EN

Stack Overflow用户

发布于 2011-12-09 07:25:09

您可以将参数打包到一个对象中,并使用辅助方法来调用您的原始方法,正如Michael和其他人现在所建议的那样。

另一种选择是dispatch_after,它将获取一个块,并在某个时间将其排队。

代码语言:javascript
复制
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:

票数 34
EN

Stack Overflow用户

发布于 2011-12-09 07:21:27

代码语言:javascript
复制
- (void) callFooWithArray: (NSArray *) inputArray
{
    [self fooFirstInput: [inputArray objectAtIndex:0] secondInput: [inputArray objectAtIndex:1]];
}


- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{

}

并使用以下命令调用它:

代码语言:javascript
复制
[self performSelector:@selector(callFooWithArray) withObject:[NSArray arrayWithObjects:@"first", @"second", nil] afterDelay:15.0];
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8439052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档