【问题标题】:How to pass NSManagedObjectContext to ViewController embedded in NavigationController & tabBarController如何将 NSManagedObjectContext 传递给嵌入在 NavigationController 和 tabBarController 中的 ViewController
【发布时间】:2013-01-29 16:53:25
【问题描述】:

我在为我的一个视图控制器 - LibraryTrackTimeViewController 设置 NSManagedObjectContext 时遇到问题。我附上一张截图(我希望这不违反这里的规则)以使其更清楚:

http://imgur.com/qgrH4T2

如您所见 - 它嵌入在 NavigationControllertabBarContoller 中。我正在为appDelegate 中的其他视图控制器设置NSManagedObjectContext

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

UINavigationController *navigationController = (UINavigationController *)[[tabBarController viewControllers] objectAtIndex:0];

TagLibraryViewController *tagLibraryViewController = (TagLibraryViewController *)[[navigationController viewControllers] objectAtIndex:0];
tagLibraryViewController.managedObjectContext = self.managedObjectContext;

navigationController = (UINavigationController *)[[tabBarController viewControllers] objectAtIndex:1];

LibrariesViewController *librariesViewController = (LibrariesViewController *)[[navigationController viewControllers] objectAtIndex:0];
librariesViewController.managedObjectContext = self.managedObjectContext;

MapViewController *mapViewController = (MapViewController *)[[tabBarController viewControllers] objectAtIndex:2];
mapViewController.managedObjectContext = self.managedObjectContext;

return YES;

}

其他视图控制器很容易通过managedObjectContext - 但我无法解决如何将它发送到我的LibraryTrackTimeViewController,因为它是嵌入的。你可以给我任何帮助或建议- 那将是真棒!有没有更好的方法将objectContexts 发送到我的视图控制器?

【问题讨论】:

  • 根据您的图表,LibraryTrackTimeViewController 是从MapViewController 推送的,那么为什么不能将 Map View Controller 的托管对象上下文传递给它呢?

标签: iphone ios core-data uiviewcontroller nsmanagedobjectcontext


【解决方案1】:

如果你觉得它太复杂,你可以从应用委托中公开上下文

// AppDelegate.h
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;

然后直接从委托中获取:

#include "AppDelegate.h"

AppDelegate *delegate = (AppDelegate*)
             [[UIApplication sharedApplication] delegate];
self.managedObjectContext = delegate.managedObjectContext;

这不是建议 - 我还建议您将上下文传递给控制器​​。但它是一种完全有效的设计模式,所以如果你觉得它更简单,你可以使用它。

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多