0

我怎样才能等待某种方法完成然后继续工作?

- (void)loadMoreDataOnBottomOfTableview
{
NSLog(@"LOADING ITEMS ON BOTTOM");
[self refreshStream];

[self.mainTableView reloadData];

...
}

所以我需要等待 refreshStream 方法完成,然后重新加载 tableview 数据和 loadMoreDataOnBottomOfTableview (...) 的其余部分。

4

5 回答 5

1

使用完成块。这就是他们的设计目的。

请参阅本指南中的完成处理程序部分。http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html

于 2013-04-24T20:04:07.973 回答
1

重新定义刷新流

 -(void)refreshStream:(void (^)(void))complete;

 -(void)loadMoreDataOnBottomOfTableview
 {
     [self refreshStream:^{
           [self.mainTableView reloadData];
     }];
 }

这应该做对了,还请查看此页面,使用 typedef 是不言而喻的标准。

http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/_index.html

于 2013-04-24T20:22:34.163 回答
0
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];

您可以使用它调用您的方法。

于 2013-04-25T05:10:41.613 回答
0

我可以迅速回答您的问题。同样,您可以在代码中使用完成块来完成任务。

class TestClosure
{

func calculateAdditionData() {

    countNumbers({ (result) -> Void in

        println("[self refreshStream] completed")
        //[self.mainTableView reloadData];
    })
}


func refreshStream(completion: (() -> Void)!) {

    //Your refresh code
    completion()
}

}

完成块/闭包是等待某事完成的正确方法。

于 2015-06-03T06:19:25.680 回答
-1

您可以performSelectorOnMainThread:withObject:waitUntilDone:按如下方式使用:

 [self performSelectorOnMainThread:@selector(refreshStream) withObject:nil waitUntilDone:YES]

 [self.mainTableView reloadData];

但是请注意,这不是推荐的设计模式。异步调用应该使用回调(你的refreshStream方法应该回调到你的视图控制器中的一个方法,然后触发reloadData

于 2013-04-24T20:05:33.837 回答