2010-06-17 87 views
2

我有一个自定义的UITableViewCell,其中包括一个标签和一个imageView。如果表视图是可见视图,并且它有一个单元格,如果我以编程方式更新标签的文本以及imageView的图像和日志,那么大约需要4秒钟后,我在标签的日志中看到通知和图像更新。这里是发生了什么以及该订单:自定义UITableViewCell不会立即更新其子视图,为什么?

-Load包含表和一个自定义单元格

- 写入一个文件到磁盘使用和的NSOperation(和队列)的观点

- 当的NSOperation在写完它触发一个NSNotification(defaultCenter),它告诉细胞的视图更新标签和图像的文件,我将[自setNeedsDisplay]

,尤其是圆形我在日志中看到,该小区已经得到通知并完成设置新值

- 约4秒后,单元格的视图实际更新。

什么给?

回答

4

我的问题的解决方案取决于我更新数据的方式,我使用NSOperation(和队列)发送通知,然后通知响应者更新视图。问题是一个技术上的NSOperation住在另一个线程所以我应该做的是:

- 写入一个文件

磁盘使用和的NSOperation(和队列) - 当被的NSOperation写完它触发文件一个NSNotification(默认中心),响应者应该执行SelectorOnMainThread一个方法,实际更新视图

这是否和我的手机立即更新。

+0

谢谢!这也解决了我的问题。我还没有意识到线程问题,但在这种情况下它并没有穿过我的脑海。 – ephemer 2015-08-24 09:19:11

0

您应该致电reloadRowsAtIndexPaths:withAnimation:更新表视图中的特定单元格。

+0

该函数可以工作,但由于修改视图会导致它更新,所以它是一个笨手笨脚的解决方案,reloadRowsAtIndexPaths:withAnimation:实际上会要求它重新加载单元格。解决方案涉及我提到的NSOperation队列,下面回答。 – Shizam 2010-06-18 04:28:33

+0

@shizam:谢谢你解释。我仍然在学习iOS中的线程和事件循环如何交互。它应该在某个地方记录下来。 – progrmr 2010-06-18 14:23:17

+0

当然,是的,我回去重读他们的示例NSOperationSample.xcodeproj项目,以逐步了解他们如何使用它并使用performSelectorOnMainThread看到它们。 – Shizam 2010-06-18 15:06:52

相关问题