0

因此,如果 json 数组返回正数,我将使用下面的代码循环遍历 json 数组,我将 json 数组添加到另一个包含所有总数组的数组中。然而,这可能需要一些时间才能完成,因为它会通过几个不同的 json url 插入不同的动态信息。

我编辑了下面的代码以显示更多基本信息。我的问题是,直到 for 循环完成,数据才真正输入到数组中。我需要在找到它后立即添加它,而不是在它运行完所有 onlineChannels.count 之后添加它 - 有什么帮助吗?

for (int i = 0; i<onlineChannels.count; i++) {
       [jsonResults addObject:[parsingJson objectAtIndex:0]];
        NSLog(@"%i",jsonResults.count);
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
        [self.tableView reloadData];
    } else {
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
        [self.tableView reloadData];
    }
}
4

1 回答 1

0

我的问题是,直到 for 循环完成,数据才真正输入到数组中。

你怎么知道的?

我看到你在打电话-reloadData,所以也许你期望改变会立即反映在你的桌子上?我相信您的对象立即添加到数组中,但更改不会立即显示在表格上。-reloadData实际上并没有重绘表格——绘图是作为主运行循环的一部分发生的。您可能正在主线程上运行此代码,这样做可以防止运行循环有任何时间重绘表格。

解决此类问题的最佳方法是将耗时的进程(如循环)移至后台线程。这将使主线程可以根据需要自由重绘表格,并且它也会使您的应用程序更具响应性。

此外,每次添加单个项目时都让表重新加载其所有数据,即使该项目的行未显示也是如此,这似乎很浪费。考虑改为调用一个方法,比如reloadRowsAtIndexPaths:withRowAnimation:只更新表中已更改的部分。

于 2013-07-24T21:12:35.190 回答