Передайте контекст управляемого объекта из ViewController в TarBarViewController, используя метод подготовки к переходу - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь передать контекст управляемых объектов основных данных из ViewController (который может загрузить его из AppDelegate в TabBarViewController.

AppDelegate.m </p> <pre><code>// 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:]: unrecognized selector sent to instance 0x6d91900
2012-03-09 01:47:03.747 Peets[22893:fb03] *** WebKit discarded an uncaught exception in the webView:shouldInsertText:replacingDOMRange:givenAction: delegate: <NSInvalidArgumentException> -[UINavigationController setManagedObjectContext:]: unrecognized selector sent to instance 0x6d91900
</code>

Ответы [ 2 ]

3 голосов
/ 05 ноября 2012

Я не совсем понимаю, как вы хотите передать 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;
}

Кстати: этот пример основан на шаблонном приложении Master-Detail Application в XCode. По умолчанию он не имеет TBVC, но если вы добавите TBVC, как на скриншоте, приведенный выше код будет работать.

enter image description here

0 голосов
/ 09 марта 2012

Вы пытаетесь установить NSManagedObjectContext для UINavigationController.

ReceiptsListViewController *receiptsListViewController = (ReceiptsListViewController *) [[tabBarViewController viewControllers] objectAtIndex:5] - это ваша проблема, так как он возвращает UINavigationController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...