我正在开发一个 iOS 应用程序,其 View 包含一个 TableView。
一些方法从网络接收数据,打开一个新线程来计算信息并在运行时使用以下方法将一行插入表中:insertRowsAtIndexPaths
。
现在,如果大量数据同时出现,表格可能会在几次插入后自行更新,而不是在每次插入后更新,这会引发一个异常,说明 section 中的行数不正确(那是因为它认为它应该有一行的增量,但线程已经插入了数据数组更多的单元格)。
即使我锁定了数据源数组的插入和 insertRowsAtIndexPaths
方法,它仍然执行相同的操作。
NSLock *mylock = [[NSLock alloc] init];
[mylock lock];
[array addObject:object];
[tableView insertRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationLeft];
[mylock unlock];
请帮忙,
谢谢!
最佳答案
你必须在主线程上运行这个方法。所有用户界面交互都必须在主线程上完成。
假设您的方法如下所示:
- (void)addSomeObject:(id)object {
[array addObject:object];
[tableView insertRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationLeft];
}
你是这样调用它的:
[self addSomeObject:anObject];
然后你会把这个调用改成这样:
[self performSelectorOnMainThread:@selector(addSomeObject:) withObject:anObject waitUntilDone:NO];
关于objective-c - Objective C 线程和 GUI 更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009455/