2013-12-11 22 views
0

在我的iOS應用程序中,我對外部(Windows Azure)表進行了讀取調用。在繼續執行下一個操作之前,我需要填入windowsAzureChatMessageResultsCopy數組。以下是代碼。iOS - 在表讀取完成之前調用的下一個方法

[chatTable readWithPredicate:predicate 
        completion:^(NSArray *results, NSInteger chatMessageCount, NSError *error) 
{ 
    if (error) 
    { 
     NSLog(@"Error: %@", error); 
     return; 
    } 
    else 
    { 
     self.windowsAzureChatMessageResultsCopy = [results mutableCopy]; 
    } 
}]; 

的應用程序,使得通話,但隨後立即轉到下一個方法,而無需輸入if... else...檢查。數組數顯示0.完成一系列方法後,應用程序返回並執行上面代碼中的if... else...部分。此時,windowsAzureChatMessageResultsCopy陣列正確填充,但已爲時過晚。

我調試了代碼並驗證了流程。有沒有辦法強制應用程序等待從表中提取結果?

+1

完成塊是異步執行的,所以你必須把所有使用'result'的代碼放到完成塊中。 –

回答

1

readWithPredicate: completion:將異步執行。正常執行將同時繼續。在您的方法執行(readWithPredicate)完成之後,將會執行completion塊,然後僅評估if..else。您可以從完成塊重新加載表格視圖。

[chatTable readWithPredicate:predicate 
        completion:^(NSArray *results, NSInteger chatMessageCount, NSError *error) 
{ 
    if (error) 
    { 
     NSLog(@"Error: %@", error); 
     return; 
    } 
    else 
    { 
     self.windowsAzureChatMessageResultsCopy = [results mutableCopy]; 
     [self.tableView reloadData]; 
    } 
}]; 

強制應用程序要等到結果來了就不會是一個很好的,因爲獲取數據可能需要一些時間,直到那麼你的UI將不會響應。

相關問題