【问题标题】:Pass Managed Object Context from a ViewController to TarBarViewController using prepare for segue使用 prepare for segue 将托管对象上下文从 ViewController 传递到 TarBarViewController
【发布时间】:2012-03-08 20:22:08
【问题描述】:

我正在尝试从 ViewController 传递核心数据托管对象上下文(它能够从 AppDelegate 加载相同的内容到 TabBarViewController。

AppDelegate.m

// Pass the managed object context to the root view controller (the login view)
LoginViewController *rootViewController = (LoginViewController *)self.window.rootViewController;
rootViewController.managedObjectContext = self.managedObjectContext;

LoginViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"LoginSegue"]){
        UITabBarController *tabBarViewController = (UITabBarController *) [segue destinationViewController];
        ReceiptsListViewController *receiptsListViewController = (ReceiptsListViewController *) [[tabBarViewController viewControllers] objectAtIndex:5];
        receiptsListViewController.managedObjectContext = self.managedObjectContext;
    }
}

当我运行它时,我遇到了这个错误

2012-03-09 01:47:03.723 Peets[22893:fb03]-[UINavigationController setManagedObjectContext:]:无法识别的选择器发送到实例 0x6d91900
2012-03-09 01:47:03.747 Peets[22893:fb03] *** WebKit 在 webView 中丢弃了一个未捕获的异常:shouldInsertText:replacingDOMRange:givenAction: delegate:  -[UINavigationController setManagedObjectContext:]: unrecognized selector sent to实例 0x6d91900

【问题讨论】:

    标签: ios core-data nsmanagedobjectcontext segue


    【解决方案1】:

    我不完全了解您希望如何将 MOC 从 VC 传递到 TBVC。通常 RootViewController 是 TBVC。如果您也是这种情况,您可以像这样通过 MOC:

    #import "AppDelegate.h"
    #import "MasterViewController.h"
    
    @implementation AppDelegate
    
    @synthesize managedObjectContext = _managedObjectContext;
    @synthesize managedObjectModel = _managedObjectModel;
    @synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
        UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
    
        UINavigationController *navigationController = (UINavigationController *)[[tabController viewControllers] objectAtIndex:0];
        MasterViewController *controller = (MasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
        controller.managedObjectContext = self.managedObjectContext;
    
        navigationController = (UINavigationController *)[[tabController viewControllers] objectAtIndex:1];
        controller = (MasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
        controller.managedObjectContext = self.managedObjectContext;
    
        navigationController = (UINavigationController *)[[tabController viewControllers] objectAtIndex:2];
        controller = (MasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
        controller.managedObjectContext = self.managedObjectContext;
    
        return YES;
    }
    

    顺便说一句:此示例基于 Xcode 中的 Master-Detail Application 模板。默认情况下它没有 TBVC,但如果您像屏幕截图中那样添加 TBVC,上面的代码将起作用。

    【讨论】:

      【解决方案2】:

      您正在尝试在 UINavigationController 上设置 NSManagedObjectContext。

      ReceiptsListViewController *receiptsListViewController = (ReceiptsListViewController *) [[tabBarViewController viewControllers] objectAtIndex:5] 是你的问题,因为它返回 UINavigationController。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多