Как пользовательской инициализации в для UIViewController интерфейса Строитель с управляемым контексте


Я создаю простой интерфейс с NavigationController и BandListViewController (UITableViewController) внутри Interface Builder и устанавливаю делегирование в свойства AppDelegate.

@interface CRUDAppDelegate : NSObject <UIApplicationDelegate> {   
    UINavigationController *bandNav;

    BandListViewController *bandList;
}

И

Введите описание изображения здесь

Однако я не могу понять, как я могу инициализировать свой BandListViewController, передавая paramater managedObjectContext, не устанавливая его на awakeFromNib. CRUDAppDelegate уже инит этот контроллер и установил свое собственное перо в navigationController, но затем, когда я пытаюсь сделать новый BandListViewController в didFinishLaunchingWithOptions с initInManagedObjectContext, дисплей (TableViewController) остается от старого bandList. (с managedObjectContext = null)

То, что я сделал до сих пор, - это сохранение списка bandList managedObjectContext в awakeFromNib, как предлагает Apple.

- (void)awakeFromNib
{
    /*
     Typically you should set up the Core Data stack here, usually by passing the managed object context to the first view controller.
     self.<#View controller#>.managedObjectContext = self.managedObjectContext;
    */

    self.bandList.managedObjectContext = self.managedObjectContext; 
}

Чего я хотел

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.bandList = [[BandListViewController alloc] initInManagedObjectContext:self.managedObjectContext];

    // Override point for customization after application launch.  
    [self.window addSubview:bandNav.view];
    [self.window makeKeyAndVisible];
    return YES;
}
2 3

2 ответа:

Поздравляю, вы нашли одно из многих раздражающих ограничений Interface Builder!

Сделайте все это в коде и избавьте себя от головной боли. Там действительно не так много кода.

В качестве альтернативы, более простой способ из вашего текущего состояния-создать экземпляр "фиктивного" контроллера в наконечнике, а затем сделать что-то вроде bandNav.viewControllers = [NSArray arrayWithObject:bandList];.

В application:didFinishLaunchingWithOptions: вы создаете новый экземпляр BandListViewController, но никогда не вставляете его представление в иерархию представлений, поэтому оно никогда не отображается.