在我的iOS应用程序中,我对外部(Windows Azure)表进行了读取调用。我希望在继续执行下一个操作之前填充windowsAzureChatMessageResultsCopy
数组。以下是代码。
[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
数组已正确填充,但为时已晚。
我调试了代码并验证了流程。有没有办法强制应用程序等待,直到从表中获取结果?
答案 0 :(得分: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];
}
}];
强制应用程序等到结果出现不好,因为获取数据可能需要一段时间,直到那时你的用户界面才会响应。