完成另一个方法后执行一个方法

时间:2014-03-12 17:29:42

标签: ios objective-c grand-central-dispatch

在我的应用程序中,我有两个方法,storeData和gotoNextView。我希望在storeData方法完成执行后执行gotoNextPage。在storeData中我保存使用Egocache成功登录后获得的令牌,在gotoNextPage中我有用于加载新视图控制器的代码,在下一个viewcontroller中我必须使用令牌来获取其他详细信息。但是问题方法gotoNextView正在storeData之前执行,所以我在下一个视图中获得了gettin null标记。

我尝试过使用以下内容:

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {

    [self storeData];

});



dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {


    [self gotoNextPage];

上面的代码正在服务于此目的,但是当我使用上面的代码时,下一个视图中的NSUrlConnections没有加载。

[self storeData];

[self performSelector:@selector(gotoNextPage) withObject:nil afterDelay:1.0f];

此代码正常工作,下一个视图中的NSUrlConnections也正常工作,但是有更好的方法来实现此目的

1 个答案:

答案 0 :(得分:4)

您可以将完成块传递给storeData方法。这样storeData可以让你知道什么时候它完成了它需要做的事情,而不是你想要猜测。

- (void)storeDataWithCompletion:(void (^)(void))completion
{
    // Store Data Processing...
    if (completion) {
        completion();
    }
}

// Calling storeDataWithCompletion...
[self storeDataWithCompletion:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self gotoNextPage];
    });
 }];

不需要dispatch_async到主队列。我补充说,因为gotoNextPage与UI相关,并且不清楚什么线程storeDataWithCompletion:将调用完成块。

Here's a link to Apple's documentation on blocks

希望这有帮助。