0

我想使用 MBProgressHUD 通知用户处理来自数组的数据。我有一个包含 N 个元素的数组,对于每个元素我都必须处理它(这意味着一些时间),所以我想通知用户进度(x% 已完成)

我有一个方法来处理这个数组(processData:(NSArray *)data)迭代数组的每个元素

我尝试在调用processData:(NSArray *)data之前将 hud 详细文本标签设置为 0% ,然后调用此方法并在每次迭代中更新 hud 但 hud 未更新(我认为这是由于我正在执行该方法在主线程中...)

有办法做到这一点吗?我应该在后台执行processData:(NSArray *)data吗?如果这是解决方案,我该怎么做?

非常感谢

4

1 回答 1

0

为了保持应用程序响应,您应该在单独的线程中执行任何长时间运行的代码。为此,只需将方法的整个逻辑移动到processData一个块中,如下所示:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    /// The code here will be executed in a background thread
});

要更新 UI,您应该确保从主 UI 线程进行正确的调用。因此,您现在可以在另一个将在主线程中执行的块中执行正确的代码,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
    /// The code here will be executed in main UI thread
});
于 2013-10-13T23:38:33.783 回答