在重新加载 tableView
之前,我有一些繁重的处理(将数千个本地 JSON 对象解析为 dataSource
用于 UITableView
的数组) 。现在,当我只是一个接一个地做,没有任何线程或其他东西时,UI 在加载数据时会卡住。
所以我尝试在 background thread
上进行处理并在 main thread
上重新加载 tableView
,但这导致了 tableView
在处理完成之前重新加载,导致崩溃。
如何解决?
这是我的代码:
// Heavy work dispatched to a separate thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
temp = [ayatArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.SratNo == %@)",mood]];
NSSet *uniqueSet = [NSSet setWithArray:[temp valueForKey:@"Para"]];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
uniqueParasArray = [uniqueSet sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
currentParaNum = [uniqueParasArray[i] integerValue];
NSNumber *mood = @(currentParaNum);
NSArray *paraWiseAyats = [[NSArray alloc] init];
paraWiseAyats = [temp filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.Para == %@)",mood]];
ayatArrayForTableView = [paraWiseAyats mutableCopy];
[self.translationTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
});
最佳答案
尝试使用下面的代码。在您的 global_queue
block 内使用 main_queue
。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
temp = [ayatArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.SratNo == %@)",mood]];
NSSet *uniqueSet = [NSSet setWithArray:[temp valueForKey:@"Para"]];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
uniqueParasArray = [uniqueSet sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
currentParaNum = [uniqueParasArray[i] integerValue];
NSNumber *mood = @(currentParaNum);
NSArray *paraWiseAyats = [[NSArray alloc] init];
paraWiseAyats = [temp filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.Para == %@)",mood]];
ayatArrayForTableView = [paraWiseAyats mutableCopy];
// Use block here
dispatch_async(dispatch_get_main_queue(), ^{
// Update UI
[self.translationTableView reloadData];
});
});
关于ios - 在主线程上重新加载 TableView 导致崩溃 - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51809907/