2

我已经搜索了 SO,寻找在视图控制器之间共享数据的不同方法。我看到传回数据的委托是 ppl 建议的最常见方式,并且一些 ppl 使用单例来从应用程序的任何位置获取信息。我还不熟悉 Core Data,但从我目前看到的情况来看,Core Data 似乎类似于来自 ManagedObjectContext 的 Singleton,您可以访问数据。因此,只要您有对该对象的引用,您就可以访问该数据(如果这种理解有误,请随时纠正我)。

在这种情况下,我想知道是否应该使用委托或单例。我基本上有一个带有两个标签的标签栏控制器。一个选项卡使用委托或在要呈现的视图上分配属性在视图之间来回传递数据。

第二个选项卡是第一个选项卡的摘要视图。因此,在完全不同的视图堆栈上,我需要与选项卡一中相同的数据。在那种情况下,我应该使用 Singleton 以便可以从应用程序中的任何地方访问它吗?还是有更好的解决方案?

另外,我想知道如果您的应用程序即将关闭,您将如何归档数据。在我看来,如果我确实实现了单例,当我收到我的应用程序将进入后台的通知时,我可以查看我的单例并保存数据。但是如果我不使用单例,当应用程序进入后台时,我将如何保存数据。我是否将那个保存代码放在应用程序委托中。

我想最后我想了解在这种情况下哪种设计模式更适合在应用程序之间存档和共享数据。谢谢!

4

1 回答 1

0

我浏览了这个关于核心数据的精彩教程:http: //timroadley.com/2012/02/09/core-data-basics-part-1-storyboards-delegation/

那里使用的方法是:您的 ManagedObjectContext 第一次在您的 AppDelegate 中初始化。然后在我的根视图控制器中,我从 appdelegate 检索 ManagedObjectContext。然后在 prepareForSegue 中,将 managedObjectContext 传递给推送的视图控制器。

AppDelegate 具有 __managedObjectContext 的只读访问器属性,它负责第一次创建这个单例对象。

在每个视图控制器中,我在 viewWillAppear 上设置了 fetchedResultsController,其中包含我想要从核心数据中获取的实体。然后,当用户点击保存按钮时,我直接写入核心数据。在我的特定应用程序中,我有一个明确的“取消”按钮,因为用户可能会出错,或者意外清除可编辑的文本数据。但是您可以在每个控件更改值后立即保留更改,例如在 iOS 中的“设置”菜单中。仅仅因为我的数据的性质,我更喜欢取消/保存方法。一些研究是为了看看您是否必须重新保存整个对象,或者只能更新 coredata 中的单个字段。

如果您直接从 managedObjectContext 读取/写入,核心数据几乎可以解决您的问题。数据立即持久化,并立即更新。如果您的数据不是故意保留的,那么委托是在屏幕之间传递数据的好方法。如果您需要使用非持久数据通知一大堆您不想知道的视图控制器,请考虑将 NSNotificationCenter 与对象或字典一起使用。
在 Objective-C 中通过 NSNotificationCenter 发送和接收消息?

于 2012-11-14T17:07:13.177 回答