【发布时间】:2009-09-17 06:12:23
【问题描述】:
我必须使用线程同时重新加载 uitableview。我已经在使用两个线程从网络加载数据。是否可以使用线程重新加载 tableview?还有其他方法吗?
【问题讨论】:
标签: iphone objective-c cocoa-touch xcode
我必须使用线程同时重新加载 uitableview。我已经在使用两个线程从网络加载数据。是否可以使用线程重新加载 tableview?还有其他方法吗?
【问题讨论】:
标签: iphone objective-c cocoa-touch xcode
与什么同时?重新加载需要时间,您需要在后台重新加载支持数据模型,同时仍然显示能够向用户显示数据?
如果是这样,那我会:
在主线程上更新真实模型属性,并请求重新加载表视图的数据是很重要的。否则会有一个时隙,表视图可以请求查看不再可用的数据模型项。
实现是这样的:
-(void)releadData;
{
[self performSelectorInBackground:@selector(reloadDataInBackground)
withObject:nil];
}
-(void)reloadDataInBackground;
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
MyDataModel* model = nil;
// Do what is needed to setup model.
[self performSelectorOnMainThread:@selector(updateModelOnMainThread:)
withObject:model
waitUntilDone:NO];
[pool release];
}
-(void) updateModelOnMainThread:(MyDataModel*)model;
{
self.model = model;
[self.tableView reloadData];
}
【讨论】:
同时与什么?
UIKit 的所有操作都必须在主线程上完成,因此您可以使用后台线程与 Internet 通信或进行自己的处理,但与 UITableView 的任何实际交互都必须在主线程上进行。
【讨论】: