Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Ios 当表视图不可见时,不调用cellForRowAtIndexPath_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 当表视图不可见时,不调用cellForRowAtIndexPath

Ios 当表视图不可见时,不调用cellForRowAtIndexPath,ios,objective-c,uitableview,Ios,Objective C,Uitableview,关于这个话题有很多问题和答案,但我找不到适合这种情况的答案 该应用程序已经投入生产大约3年了,所以我相信有问题的表视图和所有其他表视图已经正确连接。我正在添加一个新功能,我遇到了一些意想不到的事情 情况如下: 用户点击选项卡1,在表视图中显示项目列表 用户点击选项卡2并导入更多项目 发出通知 选项卡1上视图控制器上的观察者接收通知并调用其选择器 选择器更新模型并调用reloadData: numberOfRowsInSection:被调用并返回正确的行数 到目前为止,一切都和我预期的一样。但

关于这个话题有很多问题和答案,但我找不到适合这种情况的答案

该应用程序已经投入生产大约3年了,所以我相信有问题的表视图和所有其他表视图已经正确连接。我正在添加一个新功能,我遇到了一些意想不到的事情

情况如下:

  • 用户点击选项卡1,在表视图中显示项目列表
  • 用户点击选项卡2并导入更多项目
  • 发出通知
  • 选项卡1上视图控制器上的观察者接收通知并调用其选择器
  • 选择器更新模型并调用
    reloadData:
  • numberOfRowsInSection:
    被调用并返回正确的行数
到目前为止,一切都和我预期的一样。但这就是它停止的地方。
numberofrowsin节:
之后没有其他内容<代码>cellForRowAtIndexPath:未调用

显然,我正在重新加载的表视图不可见。在另一张账单上


这种行为是否是一种优化,因为表不可见,所以根本不执行
reloadData
?有人能证实这一点吗

这对我来说非常有意义,除了表视图调用numberOfRowsInSection:。当VC不可见时,我不会想到这一点


如果表视图不在当前视图层次结构中,它将不会绘制。

这对我来说非常有意义,但表视图调用numberOfRowsInSection:的部分除外。当VC不可见时,我不会想到这一点


如果表格视图不在当前视图层次结构中,它将不会绘制。

正如Duncan指出的,VC不会重新加载表格视图,除非它在当前视图层次结构中。我最近正在开发一个应用程序,它使用大量KVO来更新TableView,我能想到的最好的解决方案就是在相关的viewController上添加属性BOOL needsDraw,将视图标记为脏视图。然后,当ViewWillDisplay:在该viewController中调用时,您应该能够重新加载tableview,正如Duncan指出的那样,VC不会重新加载tableview,除非它位于当前视图层次结构中。我最近正在开发一个应用程序,它使用大量KVO来更新TableView,我能想到的最好的解决方案就是在相关的viewController上添加属性BOOL needsDraw,将视图标记为脏视图。然后,当ViewwillDisplay:在该viewController中被调用时,您应该能够重新加载tableview

请显示一些相关代码,您在哪里调用的reloadData@AhmedDaou感谢您提供查看,但我相信,在这种情况下,发布代码不会增加任何价值。正如我在下面的评论中提到的,答案在文档中是正确的:
为了提高效率,表视图只重新显示那些可见的行。
请显示一些相关代码,您在哪里调用的reloadData@AhmedDaou感谢您提供查看,但我相信,在这种情况下,发布代码不会增加任何价值。正如我在下面的评论中提到的,答案在文档中是正确的:
为了提高效率,表视图只重新显示那些可见的行。
是的,这正是我最终要做的。在通知调用的选择器中,我设置了标志,然后在
视图中显示:
我检查它。如果设置了,我将其清除,更新模型,然后调用
reloadData:
。它很好用。是的,这正是我最后要做的。在通知调用的选择器中,我设置了标志,然后在
视图中显示:
我检查它。如果设置了,我将其清除,更新模型,然后调用
reloadData:
。它工作得很好。我想它就在文档中,用于
重新加载数据:
为了提高效率,表视图只重新显示那些可见的行。
我一直都知道这一点,但我只是从可见的表视图的角度来考虑它。如果模型有1000个项目,它只会重新绘制可见的10个项目。这总是很有道理的。现在,我根据这种情况重新阅读了它,这也很有意义。我想它就在文档中,用于
重新加载数据:
为了提高效率,表视图只会重新显示那些可见的行。
我一直都知道,但我只是从可见的表视图的角度来考虑它。如果模型有1000个项目,它只会重新绘制可见的10个项目。这总是很有道理的。鉴于这种情况,我重新阅读了它,这也是有道理的。