我编写了以下代码以从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/

10-12 14:44