如何将NSManagedObjectContext传递给NavigationController中嵌入的ViewController& tabBarController

时间:2013-01-29 16:53:25

标签: iphone ios core-data uiviewcontroller nsmanagedobjectcontext

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

http://imgur.com/qgrH4T2

如您所见 - 它嵌入在NavigationControllertabBarContoller中。我正在为NSManagedObjectContext中的其他viewControllers设置appDelegate

-(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发送给我的视图控制器?

1 个答案:

答案 0 :(得分:2)

如果您发现它太复杂,您可以从应用代理

公开上下文
// AppDelegate.h
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;

然后直接从代表处获取它:

#include "AppDelegate.h"

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

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