2014-03-12 99 views
1

在我的应用程序中,我有两个方法,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

显示'storeData'方法代码 – Shubhank

+1

您的代码应该工作并在第一个程序块完成后执行第二个程序块。那么NSURLConnections有什么问题? - 为什么不在第一个块中调用这两种方法? –

+0

@MartinR这就是我也dint了解..为什么nsurl块不工作 – BalaChandra

回答

5

你可以完成块传递给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

希望这有助于。

相关问题