在 iphone/ipad 选项卡之间共享 NSManagedObjectContext 和其他服务类

发布于 2024-09-13 02:29:33 字数 531 浏览 5 评论 0原文

我很乐意构建一个基于 Core Data 选项卡的 iPad 应用程序。我在我的应用程序委托类中使用以下内容将 NSManagedObjectContext 传递到我的根视图。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    self.rootViewController.managedObjectContext = self.managedObjectContext;
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;    
}

我的问题是:如何在所有选项卡上设置相同的 ManagedObjectContext?如果我可以在应用程序委托中设置一些服务类并在所有选项卡中使用相同的实例,那就太好了。这怎么能做到呢?

提前致谢!

I am well into building a Core Data tab-based iPad application. I am passing in my NSManagedObjectContext to my root view using the following in my app delegate class.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    self.rootViewController.managedObjectContext = self.managedObjectContext;
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;    
}

My question is: how do I set the same managedObjectContext on all my tabs? It would also be good if I could set up some of my service classes in the app delegate and use the same instance across all my tabs. How can this be done?

Thanks in advance!

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

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

发布评论

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

评论(2

野生奥特曼 2024-09-20 02:29:33

“选项卡”只是另一个视图控制器。当您为每个选项卡启动 VC 时,您可以按照与设置 rootViewController.managedObjectContext 完全相同的方式为它们提供托管对象上下文,假设它们具有 ManagedObjectContext 属性。

有些人使用单例对象向他们的类提供 Core Data 对象;我在当前正在开发的应用程序中所做的就是声明一个协议 CoreDataSource,其中包含 NSManagedObjectContext、NSManagedObjectModel 和 NSPersistentStoreCoordinator 的 getter,并在我的 appDelegate 上实现该协议。我需要使用核心数据的视图控制器具有 NSObject类型的成员变量,并且在它们相互创建时设置属性。它们实际上都指向我的 appDelegate,但它们不知道,因此它们没有与上游对象紧密耦合。

A "tab" is simply another view controller. As you initiate the VCs for each tab, you can hand them a managed object context in exactly the same way you set rootViewController.managedObjectContext, assuming that they have managedObjectContext properties.

Some people use singleton objects to provide Core Data objects to their classes; what I did in the app I'm currently working on was to declare a protocol, CoreDataSource, with getters for my NSManagedObjectContext, NSManagedObjectModel, and NSPersistentStoreCoordinator, and implemented that protocol on my appDelegate. My view controllers that need to use core data have member variables of type NSObject <CoreDataSource>, and as they create each other they set the property. They're all actually pointing to my appDelegate, but they don't know it, so they're not tightly coupled to an upstream object.

花之痕靓丽 2024-09-20 02:29:33

最简单的解决方案是为选项卡视图控制器添加带有 managedObjectContext 属性和自定义 getter 方法的超类,例如:

- (NSManagedObjectContext *) managedObjectContext{
    if (managedObjectContext !=nil) {
        return managedObjectContext;
    }
    MyAppDelegateClass *appDelegate=(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate];
    self.managedObjectContext=appDelegate.managedObjectContext;
    return managedObjectContext;
}

如果所有选项卡视图控制器都继承此方法,它们都会自动查找应用程序委托的托管对象语境。你就完成了。

The simplest solution is to add super class for you tab view controllers with a managedObjectContext attribute and a custom getter method like:

- (NSManagedObjectContext *) managedObjectContext{
    if (managedObjectContext !=nil) {
        return managedObjectContext;
    }
    MyAppDelegateClass *appDelegate=(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate];
    self.managedObjectContext=appDelegate.managedObjectContext;
    return managedObjectContext;
}

If all your tab view controllers inherit this method they will all automatically find the app delegate's managed object context. And you're done.

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