Я пытаюсь передать контекст управляемого объекта основных данных из 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:]: 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
Ответ 1 · рейтинг 3 · rockstarberlin
Я не совсем понимаю, как вы хотите передать 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 в Xcode. По умолчанию у него нет TBVC, но если вы добавите TBVC, как на скриншоте, приведенный выше код будет работать.
Ответ 2 · tim
Вы пытаетесь установить NSManagedObjectContext в UINavigationController.
ReceiptsListViewController *receiptsListViewController = (ReceiptsListViewController *) [[tabBarViewController viewControllers] objectAtIndex:5] - это ваша проблема, поскольку она возвращает UINavigationController.