我正在开发一个包含TableView视图的iOS应用。
某些方法从Web接收数据,打开一个新线程来计算信息,并在运行时使用以下方法在表中插入一行:insertRowsAtIndexPaths
。
现在,如果有很多数据同时出现,那么表可能会在几次插入之后而不是在每次插入之后自行更新,这会引发一个异常,说明部分中的行数不正确(那是因为它认为它应该有一行的增量,但线程已经插入了更多单元格的数据数组。)
即使我对数据源数组和insertRowsAtIndexPaths
方法的插入进行了锁定,它仍然会这样做。
NSLock *mylock = [[NSLock alloc] init];
[mylock lock];
[array addObject:object];
[tableView insertRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationLeft];
[mylock unlock];
请帮忙,
谢谢!
答案 0 :(得分:9)
你必须在主线程上运行此方法。所有用户界面交互都必须在主线程上完成。
假设您的方法如下:
- (void)addSomeObject:(id)object {
[array addObject:object];
[tableView insertRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationLeft];
}
你这样称呼它:
[self addSomeObject:anObject];
那么您可以将此调用更改为以下内容:
[self performSelectorOnMainThread:@selector(addSomeObject:) withObject:anObject waitUntilDone:NO];