在iphone开发中在对象之间传递数据的最佳方法?

时间:2010-10-23 16:32:21

标签: iphone delegates singleton datasource nsmanagedobjectcontext

我正在开发一个iphone应用程序,并且不知道跨视图保存临时数据的最佳方法。例如,我在服务器上有xml,我将数据解析为一个对象,以便我可以保存信息。 xml有一些我希望在一个视图上显示的数据和我希望在另一个视图上显示的其他数据。我有一个名为dataStore的类,我希望在视图中保存数据,这样做的最佳iphone实践是什么?

我已经研究了很多选项,我认为它可以选择:

1)使用dataStore作为委托,并且可以访问委托中的数据。

2)使用dataStore作为单例类,只允许该类的一个实例,并从dataStore类的共享实例访问数据。

3)甚至可能是我不了解的NSMangedObjectContext但熟悉通过应用程序上下文和实例传递数据的android方式。

如果有人可以帮我选择哪种是iphone的最佳做法,我将不胜感激。

4 个答案:

答案 0 :(得分:2)

您可以使用NSNotification宣布数据已到达。您可以将临时对象与通知一起发送,作为发件人或在信息词典中。然后,需要部分数据的两个对象可以将这些部分拉出并保留那些部分,而临时数据对象可以只是:临时,持续到通知完成为止。只有您的视图所需的部分需要关注,并且每个视图控制器都可以在有意义的时候释放它的部分。

答案 1 :(得分:0)

在您的情况下,我建议将dataStore类转换为单例。在单例中,解析数据并具有返回视图所需信息的方法。如果您希望数据在启动期间保持不变,那么核心数据(managedObjects)就很好。虽然常见,但在appDelegate中存储数据是我选择的最后一个选项。

答案 2 :(得分:0)

  1. 不,你不能让dataStore成为委托。你永远不应该保留你的代表,因此它不适合数据,只适用于行为。

  2. 最有可能是单身人士。你在这里有什么可能是你的应用程序的模型,你的应用程序应该能够处理两个模型是否有任何理由?它能同时显示多个文件吗?不要编写一行代码来尝试阻止单例的客户端创建第二个实例! Objective-C是一个动态的运行时,无论如何都是一个持久的用户,所以你的代码所做的就是添加更多代码和潜在的bug。

  3. 在您确实需要之前,请不要理会Core Data和NSManagedObjectContext。如果您打算在模型中处理的数据多于RAM中的数据,那么您只需要这样做。

答案 3 :(得分:-1)

这些都不是真正的MVC。你想要三个班级:

  • 模型,其中包含数据
  • 视图,通常在IB中作为.xib完成,
  • 视图控制器,它是.xib的文件所有者,并将数据作为实例字段。这个负责将模型的数据传递给视图,视图将视图控制器设置为delegatedataSource。这样,视图可以重复使用,并且只处理一小部分数据(即与实际可见的数据完全一样)。