我编写了以下代码以从NSInvocationOperation重新加载UITableView。但是,调用[tableview reloadData]
后,接口不会长时间更新。
苹果文档说,在NSOperation中不会调用委托方法。
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(connectToServer)
object:nil];
[queue addOperation:operation];
[operation release];
[queue autorelease];
- (void) connectToServer
{
...
...
[tableview reloadData];
}
最佳答案
问题在于,UI更新必须在主线程上进行,并且通过NSOperationQueue从后台线程调用reloadData。
您可以使用NSObject方法performSelectorOnMainThread:withObject:waitUntilDone:来确保此类更新发生在主线程上。
- (void) connectToServer
{
...
...
[tableView performSelectorOnMainThread:@selector(reloadData)
withObject:nil
waitUntilDone:NO];
}
此外,
NSOperationQueue
不应是局部变量。它应该是此类的保留属性,并且只能在dealloc
中发布。关于iphone - 从NSOperation重新加载UITableView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9288538/