自定义UITableViewCell不会立即更新其子视图,为什么?
我有一个自定义的UITableViewCell,其中包括一个标签和一个imageView。如果表视图是可见视图,并且它有一个单元格,如果我以编程方式更新标签的文本以及imageView的图像和日志,那么大约需要4秒钟后,我在标签的日志中看到通知和图像更新。这里是发生了什么以及该订单:自定义UITableViewCell不会立即更新其子视图,为什么?
-Load包含表和一个自定义单元格
- 写入一个文件到磁盘使用和的NSOperation(和队列)的观点
- 当的NSOperation在写完它触发一个NSNotification(defaultCenter),它告诉细胞的视图更新标签和图像的文件,我将[自setNeedsDisplay]
,尤其是圆形我在日志中看到,该小区已经得到通知并完成设置新值
- 约4秒后,单元格的视图实际更新。
什么给?
我的问题的解决方案取决于我更新数据的方式,我使用NSOperation(和队列)发送通知,然后通知响应者更新视图。问题是一个技术上的NSOperation住在另一个线程所以我应该做的是:
- 写入一个文件
磁盘使用和的NSOperation(和队列) - 当被的NSOperation写完它触发文件一个NSNotification(默认中心),响应者应该执行SelectorOnMainThread一个方法,实际更新视图
这是否和我的手机立即更新。
您应该致电reloadRowsAtIndexPaths:withAnimation:更新表视图中的特定单元格。
该函数可以工作,但由于修改视图会导致它更新,所以它是一个笨手笨脚的解决方案,reloadRowsAtIndexPaths:withAnimation:实际上会要求它重新加载单元格。解决方案涉及我提到的NSOperation队列,下面回答。 – Shizam 2010-06-18 04:28:33
@shizam:谢谢你解释。我仍然在学习iOS中的线程和事件循环如何交互。它应该在某个地方记录下来。 – progrmr 2010-06-18 14:23:17
当然,是的,我回去重读他们的示例NSOperationSample.xcodeproj项目,以逐步了解他们如何使用它并使用performSelectorOnMainThread看到它们。 – Shizam 2010-06-18 15:06:52
谢谢!这也解决了我的问题。我还没有意识到线程问题,但在这种情况下它并没有穿过我的脑海。 – ephemer 2015-08-24 09:19:11