最佳实践:ListView - DetailView。加载更多结果

时间:2014-07-23 19:42:40

标签: ios objective-c core-data notifications key-value-observing

对于最佳实践,我有一个基本问题。

设置:

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?

有这么多可能性。但是什么是好方法?

3 个答案:

答案 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的更改。

到目前为止工作得很好......