如何控制ViewControllers之间的数据流

时间:2011-03-15 20:11:53

标签: ios iphone sqlite core-data delegates

我首先要说的是我是Objective-C和iPhone的新手,但我有C ++,Java,AS3等历史......

我正在尝试构建某种RSS阅读器,并且我的所有提要都有一个数组。如何将新Feed保存到此阵列的最佳方法是什么?我有一个基于导航的项目,我有一个添加按钮,它将viewController推到顶部以输入新的feed URL。

但是如何将其保存回我的其他ViewController中的数组?我是否需要更多地研究SQLLite?或者设置一些代表?还是核心数据?

3 个答案:

答案 0 :(得分:1)

我自己更喜欢单例方法,但Apple推荐依赖注入,即根据需要将数据模型对象从视图控制器传递到视图控制器。

如果您使用Xcode中的模板导航项目查看Core Data,您可以看到它是如何工作的。 managedObject上下文是数据模型,它由应用程序委托初始化并保存。然后,您可以通过两种方式访问​​它:

(1)由于Application实例本身是一个单例,您可以询问它的委托,然后向委托询问其managedObjectContest属性。因此,在视图控制器中,您将拥有一个属性managedObjectContext,其定义的getter定义如下:

(NSManagedObjectContext *) managedObjectContext{
    if (managedObjectContext !=nil){
        return managedObjectContext;
    }
    // this is basically applicationObject.delegate.managedObjectContext
    self.managedObjectContext=[[[NSApplication sharedApplication] delegate] managedObjectContext];
    return managedObjectContext
}

(2)或者,只要视图打开另一个视图,它就会将下一个视图的managedObjectContext属性设置为它自己的视图。这样每个视图都会打开一个上下文。如果由于某种原因实际上有多个数据对象,这将非常有用。

如果您只是使用数组或自定义数据模型类,只需将其名称替换为上述代码中的managedObjectContext。

答案 1 :(得分:0)

查看this问题。我建议使用单例类并创建一些侦听器模式,以便在数据发生更改时发出信号(或者只是在视图变为可见之前重新加载)。

答案 2 :(得分:0)

您可能希望使用单例

将Feed项目存储在内存中

类似于正在使用的内容:Singleton shared data source in Objective-C