Objective-C调用方法等待响应,然后继续下一个代码

时间:2014-03-11 07:45:26

标签: ios objective-c methods

获取BOOL后暂停和恢复的任何代码?

-(void)methodOne{
    [self methodTwo]; <----- what should I code here to "pause and waiting respond? 
    /// other coding
}

==============更新============

我希望调用methodTwo,在继续///其他编码之前等待返回BOOL

4 个答案:

答案 0 :(得分:2)

这里有很多答案,没有理由就太复杂了。

正如@samfisher所提到的,如果你的methodTwo没有运行异步代码,那么执行是串行的,这意味着你的methotOne函数中的代码将在methodTwo完成后执行。

如果您有异步代码,那么明显而简单的解决方案是将methodOne拆分为两个独立的函数:

-(void)methodOne{
    //previous code execution here
    [self methodTwo];
}

- (void)afterMethodTwo(BOOL)resultsFromMethodTwo {
    /// other coding
}

并在methodTwo中,调用afterMethodTwo函数并传递布尔变量,如下所示:

[self afterMethodTwo:myBool];

这是最简单,最干净的方法,因为任何其他方法都会使代码变得不必要复杂。

答案 1 :(得分:1)

确保您的methodTwo没有任何异步执行

答案 2 :(得分:1)

像这样使用'performSelectorOnMainThread',重要的是将'waitUntilDone'设置为'YES':

-(void)methodOne
{   

//  [self methodTwo];// <----- what should I code here to "pause and waiting respond?
    /// other coding

    NSNumber *isDone = [self performSelector:@selector(methodTwo) withObject:nil waitUntilDone:YES];

    NSLog(@"%i", [isDone boolValue]);

}

-(NSNumber*)methodTwo
{

    return [[NSNumber alloc] initWithBool:YES]; 
}

答案 3 :(得分:0)

像这样使用'performSelectorOnMainThread',重要的是将'waitUntilDone'设置为'YES':

-(void)methodOne{
    [self performSelectorOnMainThread:@selector(methodTwo) withObject:nil waitUntilDone:YES];
    /// other coding
}