iOS - 在表读取之前调用的下一个方法完成

时间:2013-12-11 04:32:07

标签: ios objective-c azure wait

在我的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数组已正确填充,但为时已晚。

我调试了代码并验证了流程。有没有办法强制应用程序等待,直到从表中获取结果?

1 个答案:

答案 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];
    }
}];  

强制应用程序等到结果出现不好,因为获取数据可能需要一段时间,直到那时你的用户界面才会响应。