如何控制ViewController之间的数据流

发布于 2024-10-22 00:24:33 字数 267 浏览 1 评论 0原文

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

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

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

I'll start by saying I'm new to Objective-C and iPhone but I have history in C++, Java, AS3, ...

I'm trying to build some sort of RSS Reader, and I have an array for all my feeds. How is the best approach to save new feeds to this array? I have a navigation based project, and I have an add button which pushes a viewController on top to enter new feed URL.

But how do I save this back to the array in my other ViewController? Do I need to research more into SQLLite? Or set some delegates? Or Core Data?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

多彩岁月 2024-10-29 00:24:33

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

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

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

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

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

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

I prefer the singleton method myself but Apple recommends dependency injection i.e. passing a data model object from view controller to view controller as needed.

If you look at a Core Data utilizing template navigation project in Xcode, you can see how this works. The managedObject context is the data model and it is initialized and held by the app delegate. You can then access it two ways:

(1) Since the Application instances itself is a singleton, you can ask it for its delegate and then ask the delegate for its managedObjectContest property. So, in a view controller you would have a property managedObjectContext with a custom getter defined like:

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

(2) Alternatively, whenever a view opens another view, it just sets the next view's managedObjectContext property to it's own. So that every view opens with a context. This is useful if you actually have multiple data objects for some reason.

If your just using an array or a custom data model class just substitute its name for the managedObjectContext in the code above.

2024-10-29 00:24:33

查看这个问题。我建议使用单例类并创建一些侦听器模式来在数据更改时发出信号(或者总是在视图可见之前重新加载)。

Check out this question. I recommend using a singleton class and creating some listener pattern to signal when the data has changed (or just reload, always, before your view becomes visible).

深者入戏 2024-10-29 00:24:33

您可能希望使用单例将提要项存储在内存中

类似于正在使用的内容: Objective-C 中的单例共享数据源

You might want to store your feed items in memory by using the a singleton

Something similar to what is being used: Singleton shared data source in Objective-C

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文