Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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最佳实践-更新父视图中的对象';s系列_Ios_Design Patterns - Fatal编程技术网

iOS最佳实践-更新父视图中的对象';s系列

iOS最佳实践-更新父视图中的对象';s系列,ios,design-patterns,Ios,Design Patterns,我想知道你对什么是最好的方法的看法 我有一个带有UITableView的视图控制器(EventsController)。它从后端应用程序获取事件数据,并将其存储在实例变量events(NSArray)中。它使用事件数组填充表视图 当用户点击表中的一行时,它们将被带到另一个视图控制器(EventDetailController)。在此过程中,EventDetailController被传递给所选的事件对象。 详细信息控制器允许用户跟踪或取消跟踪此事件。当用户跟踪/取消跟踪一个事件时,信息将发送到后

我想知道你对什么是最好的方法的看法

我有一个带有UITableView的视图控制器(EventsController)。它从后端应用程序获取事件数据,并将其存储在实例变量events(NSArray)中。它使用事件数组填充表视图

当用户点击表中的一行时,它们将被带到另一个视图控制器(EventDetailController)。在此过程中,EventDetailController被传递给所选的事件对象。 详细信息控制器允许用户跟踪或取消跟踪此事件。当用户跟踪/取消跟踪一个事件时,信息将发送到后端。目前,在从后端接收到成功响应后,细节控制器会发布通知,让观察者知道事件已更改。 EventsController观察此通知,并在收到通知时重新加载自身(从后端获取所有事件并重新加载表)。我认为这太过分了(顺便说一句,这个通知也是由EventsController以外的视图使用的,我认为这就是为什么它们使用通知而不是协议/委托的原因)

我的问题是如何在EventsController中更新已更改的事件,而不必转到后端。 请注意,两个控制器都位于导航控制器内

  • 在segue期间,将选定的事件对象传递给细节控制器 就像现在正在做的那样。成功响应后,细节控制器将启动 从后端更新这个事件对象。所以实际上这个物体 事件控制器中的事件数组将被更新。 EventsController可以在中触发重新加载表 视图将出现,因此当用户 导航回EventsController
  • 使用protocol/delegate方法让EventsController知道 事件已跟踪或未跟踪。
    • a。在EventsController中,当调用协议方法时,查找事件(它们具有唯一id 属性)在数组中,更新它并重新加载表
    • b。或者在EventsController中,不仅维护事件数组,还维护 字典(键将是事件id,值将是该事件的索引 调用事件数组中的对象)协议方法时,它可以 在数组中更快地查找事件并更新它。打电话 重新加载表格

  • 您会使用当前的方法,1、2.a还是2.b?谢谢。

    我会将事件分成一个模型类。您可以在EventsController中实例化它,并通过属性将其传递给EventDetailController,也可以使其成为整个应用程序都可以访问的单例。在事件详细信息中更改事件时,只需在EventModel类中更新它,并让model类广播通知,或者只需通过KVO观察事件数组。(警告一句:如果您对事件数组使用可变数组,则对集合中的一个对象进行突变不会触发KVO通知。您必须替换该数组才能获得自动注释。)


    以这种方式分离模型后,您会发现从应用程序中的任何位置执行诸如从网络服务重新加载、保存事件、修改事件等操作都非常容易。

    Ah这是一个极好的解决方案。当你说模型时,你不一定是指核心数据,是吗?模型可以是具有表示所有事件的数组的单例?EventsController只需将所选事件索引传递给detail controller即可。不需要核心数据。只是一个包含一系列事件的类,您可以根据需要修改/观察这些事件。