Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableView重新加载数据不';不要立即重新装填_Iphone_Cocoa Touch - Fatal编程技术网

Iphone UITableView重新加载数据不';不要立即重新装填

Iphone UITableView重新加载数据不';不要立即重新装填,iphone,cocoa-touch,Iphone,Cocoa Touch,我正在尝试在iPhone应用程序中处理在线数据。但是我因为这个而生气: 我有用于使用NSURLConnection下载数据的对象。方法使用单独线程中的连接(和其他内容)开始工作-[NSThread detachNewThreadSelector:@selector(docConnectionInNewThread)to target:self with object:nil] 当数据被加载(connectionDidFinishLoading)时,我将它们交给我的viewController。这

我正在尝试在iPhone应用程序中处理在线数据。但是我因为这个而生气:

我有用于使用NSURLConnection下载数据的对象。方法使用单独线程中的连接(和其他内容)开始工作-
[NSThread detachNewThreadSelector:@selector(docConnectionInNewThread)to target:self with object:nil]

当数据被加载(connectionDidFinishLoading)时,我将它们交给我的viewController。这一切都很好。当我使用断点或NSLog时,我已经准备好在UITableView中显示数据。当我调用reloadData时,不会立即发生任何事情。它可能会在2秒钟后重新加载数据(
-(UITableViewCell*)tableView:(UITableView*)tableView cellforrowatinexpath:(nsindepath*)indepath
在此延迟后被调用)


但当我滑动tableView时,它会立即重新加载数据。因此,连接等工作正常,但它只是不重新加载数据。为什么?我想这可能是因为URLConnection阻塞了主线程。但是现在我在单独的线程中使用它,它仍然是一样的…

您是否在分离的线程中访问表视图

确保使用以下命令更新主线程上的UI:


-performSelectorOnMainThread:withObject:waitUntilDone:

您的
tableView.reloadData
函数可能不会在主线程中运行,因此您应该在
DispatchQueue.main.async
中使用
tableView.reloadData()
在主线程中运行该函数

例如:

DispatchQueue.main.async {
  tableview.reloadData()
}

嗯,现在我正常地用连接的东西运行我的对象函数(没有分离的线程),但是当我得到所有需要的数据时,我调用“-performSelectorOnMainThread:withObject:waitUntilDone:”来通知我的viewController重新加载数据,它工作得很好。非常感谢。诀窍是什么?这个名字的意思是“在主线程上毫无耐心地做这件事”。所以它会停止上一个URLConnection或者什么?通常不支持在非主线程上访问UI状态机。特别是,重载数据将表视图标记为需要显示以重载数据(即重载数据是惰性的)。由于您不在主线程上,显示计划可能不正确。您也不能在显示后台线程中的数据时使用相同的集合(可变数组或字典),至少不能在没有适当锁定的情况下使用。在另一个线程上读取NSMutableArray或NSMutableDictionary时,不能从一个线程向其添加对象。