Как пользовательской инициализации в для 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 ответа:
Поздравляю, вы нашли одно из многих раздражающих ограничений Interface Builder!
Сделайте все это в коде и избавьте себя от головной боли. Там действительно не так много кода.В качестве альтернативы, более простой способ из вашего текущего состояния-создать экземпляр "фиктивного" контроллера в наконечнике, а затем сделать что-то вроде
bandNav.viewControllers = [NSArray arrayWithObject:bandList];
.