我如何等待某些方法完成然后继续工作?
- (void)loadMoreDataOnBottomOfTableview
{
NSLog(@"LOADING ITEMS ON BOTTOM");
[self refreshStream];
[self.mainTableView reloadData];
...
}
所以我需要等待refreshStream方法完成,然后重新加载tableview数据和loadMoreDataOnBottomOfTableview(...)的其余部分。
答案 0 :(得分:1)
使用完成块。这就是他们的目的。
请参阅本指南中的完成处理程序部分。 http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html
答案 1 :(得分:1)
重新定义refreshStream
-(void)refreshStream:(void (^)(void))complete;
-(void)loadMoreDataOnBottomOfTableview
{
[self refreshStream:^{
[self.mainTableView reloadData];
}];
}
这应该对你也正确看看这个页面,使用typedef是未说出口的标准。
http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/_index.html
答案 2 :(得分:0)
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];
您可以使用此方法调用您的方法。
答案 3 :(得分:0)
我可以在swift中回答您的问题。同样,您可以在代码中使用完成块来完成任务。
class TestClosure
{
func calculateAdditionData() {
countNumbers({ (result) -> Void in
println("[self refreshStream] completed")
//[self.mainTableView reloadData];
})
}
func refreshStream(completion: (() -> Void)!) {
//Your refresh code
completion()
}
}
完成块/闭包是等待某些事情完成的正确方法。
答案 4 :(得分:-1)
您可以按如下方式使用performSelectorOnMainThread:withObject:waitUntilDone:
:
[self performSelectorOnMainThread:@selector(refreshStream) withObject:nil waitUntilDone:YES]
[self.mainTableView reloadData];
但请注意,这不是推荐的设计模式。异步调用应该使用回调(您的refreshStream
方法应该回调到视图控制器中的方法,然后应该触发reloadData