2014-03-12 152 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

希望這有助於。

相關問題