我想知道您的意见是什么是最好的方法来做到这一点。iOS最佳实践 - 更新父视图集合中的对象
我有一个视图控制器(EventsController)与UITableView。它从后端应用程序获取事件数据并将它们存储在实例变量events(NSArray)中。它使用events数组填充表视图。
当用户点击表格中的某一行时,它们被带到另一个视图控制器(EventDetailController)。在segue期间,EventDetailController传递选定的事件对象。 细节控制器让用户关注或取消关注此事件。当用户关注/取消关注将信息发送到后端的事件时。目前在从后端接收到成功响应之后,详细控制器发布通知,让观察员知道事件发生了变化。 EventsController观察此通知,并在获取通知时重新加载自身(从后端获取所有事件并重新加载表)。我认为这是过度的(顺便说一下,这个通知也被EventsController以外的视图使用,我认为这就是为什么他们会使用通知而不是协议/委托)。
我的问题是关于如何在EventsController中更新已更改的事件而不需要到后端。 请注意,两个控制器均位于导航控制器内。
- 在segue期间,将所选事件对象传递到详细控制器 ,正如现在所做的那样。来自后端的成功响应 的详细控制器更新这个非常事件对象。所以事实上,EventsController中事件数组中的对象 将被更新。 EventsController可以在 viewWillAppear中触发表格的重新加载,并且当用户 导航回到EventsController时,反映将会反映出来。
- 使用协议/委托方法让EventsController知道 事件被关注或取消关注。
- a。在调用协议方法的EventsController中,查找数组中的事件(它们具有唯一的ID 属性),更新它并重新加载表。
- b。或者在EventsController中不仅维护一个事件数组,而且还维护一个字典(键将事件ID和值将是该事件数组中的 对象的索引)协议方法被调用,它可以查看 上找到事件更快在数组中并更新它。并致电 重新加载表。
你会用哪种当前方法,1,2.A或2.B?谢谢。
啊,这是一个很好的解决方案。当你说模型时,你不一定是核心数据,是吗?该模型可以是一个单数表示所有事件的数组? EventsController可以将选定的事件索引传递给细节控制器。 – septerr
不需要核心数据。只是一个具有一系列事件的类,您可以根据需要修改/观察事件。 – jsd