【问题标题】:Passing a managedObjectContext through to a UITabBarController's views将 managedObjectContext 传递给 UITabBarController 的视图
【发布时间】:2011-04-27 14:57:43
【问题描述】:

我有一个基于实用程序模板的应用程序(您可以在其中翻转视图以查看另一个)。在第一个视图中有一个登录屏幕,然后它翻转以显示 UITabBar 样式的界面。

我无法确定如何将 managedObjectContext 从 App Delegate(创建它的位置)一直传递到 Tab Bar 的每个视图。

App Delegate 的 managedObjectContext 被传递给 FrontLoginViewController,后者被传递给 BackViewTabBarViewController .. 下一步在哪里?

BackViewTabBarViewController nib 有一个 UITabBarController,每个选项卡都有一个 UINavigationController。

【问题讨论】:

    标签: iphone core-data ios uitabbarcontroller nsmanagedobjectcontext


    【解决方案1】:

    听起来像 managedObjectContext 是在您的 AppDelegate 中定义的。如果是,那么……

    从你想要的任何 viewController ......只需调用

    MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];
    

    然后使用...

    appDelegate.managedObjectContext
    

    只要您需要 managedObjectContext。将 MyApplicationDelegate 更改为您的 AppDelegate 就可以了。

    【讨论】:

    • 我想对于一个非常琐碎的应用程序来说很好,但我们可以停止推广这种反模式吗?不是好的面向对象设计,这不是 Apple 推荐的,它所做的只是将您的应用程序委托降级为美化的服务定位器/全局。
    • @LukeRedpath 您的评论没有用。你为什么不描述一个替代方案?
    • @MatterGoal 另一种方法是根据需要传递您的依赖项。 Apple 提供了这样做的示例,并且对全局依赖项的依赖注入只是一般的良好工程实践。它使您的应用程序更难测试并将您的代码变成意大利面条。如果在我正在开发的任何应用程序中使用它,它就不会通过代码审查。
    • @LukeRedpath 谢谢!你确定使用这种方法的 App 没有通过代码审查?!在那种情况下......乔丹,最好接受另一个正确的答案。
    • 代码审查是指内部代码审查,与 App Store 审查过程无关。
    【解决方案2】:

    我遇到了同样的问题,我会分享我的解决方案。

    首先,您需要在 nib 文件的选项卡栏中引用导航控制器,确保将其连接起来。

    IBOutlet UINavigationController *navigationController;
    

    然后,按照支持文档中的建议获取 Controller 并将 managedObjectContext 发送给它:

    SavedTableViewController *saved = (SavedTableViewController *)[navigationController topViewController];
    saved.managedObjectContext = self.managedObjectContext;
    

    Alex(来自另一篇文章)是对的,“您通常应该远离从应用程序委托获取共享对象。这使得它的行为太像一个全局变量,并且与之相关的问题一团糟。 "

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-07
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多