对于最佳实践,我有一个基本问题。
设置:
ListViewController: 带有ManagedObjects的UiTableView。对象将从服务器加载。 首先加载20个对象。滚动到表格的末尾,将加载下20个对象。 选择一个单元格将加载DetailViewController。 我有一个带有项目数组的ListObject(以及包含有关列表的信息的其他属性,与DetailVC无关)
DetailViewController: 显示所选对象的详细信息。 VC还有2个按钮,用于显示下一个对象详细信息或上一个对象。
现在,例如在ListVC中加载了20个对象,我选择了第10行,即 将显示索引为10的Object的DetailVC。 然后我点击下一个对象直到对象编号20。 现在,当我单击“下一个”按钮时,必须从服务器加载接下来的20个对象。 (显示对象#21,但只加载了20个对象)。
是否有最佳实践来加载下一个对象? 我有一个数据加载类。 - (void)loadDataWithRequest:completionHandler: 当NSUrlSession DownloadTask完成时,将调用completionHandler并调用类ApiParser以进行json解析,并将结果添加到List对象中。
所以我必须在DetailVC中为接下来的20个对象调用它。
现在最好的做法是什么?或者有更好的方法来实现数据加载吗?
我可以将ListVC引用传递给DetailVC并调用[listvc loadDataWithRequest:completionhandler]并从[listvc.listobject.items objectAtIndex]中加载详细信息
或者我可以将ListObjectItems传递给detailVC。以某种方式加载新对象和 对ListObjectItems计数有一个KVO。
其他方法是委托或NotificationCenter。
但我想最佳做法是不将loadData方法放在ListVC中,而是放在其他地方。
如何将dataLoad方法作为实例方法放在ListObject类中,并在ListVC和DetailVC中监听KVO?
有这么多可能性。但是什么是好方法?
答案 0 :(得分:1)
当" next"或"之前"按下按钮,您可以通知主表格视图"行动。然后,如果需要,这将在显示详细视图之前加载下一批。不要阻止UI,在等待下一批返回时在空白详细信息视图中显示微调器或其他内容。
总结:不要在详细视图中放置任何加载逻辑。它应该只负责显示"详细信息"如果你告诉它显示nil
(例如,尚未完成加载),可能还有一个加载微调器。
答案 1 :(得分:1)
理想情况下,您将处理要显示的数据,在这种情况下,ListObject
,单独来自显示数据的视图控制器,在本例中为{{1} }或ListVC
。
然后,每个VC都应该保留对数据源的引用,数据源可以是一个包含DetailVC
的类,名为ListObject
。该类应该包含从服务器加载数据的方法。然后,每个VC都可以告诉ListDataSource
再加载20个对象。
这种责任分配是一个名为MVC的通用编程范例的一个很好的例子。更多关于here。
答案 2 :(得分:0)
对于迟到的回复表示歉心,感谢所有回复。
我现在有一个ListObject方法来加载下一个数据。 在ListVC和DetailVC中,我使用KVO来监听对ListObject的更改。
到目前为止工作得很好......