Как настроить пользовательский интерфейс UIViewController Интерфейсного Разработчика с управляемым контекстом - PullRequest
3 голосов
/ 19 июня 2011

Я создаю простой интерфейс с помощью NavigationController и BandListViewController (UITableViewController) в Интерфейсном Разработчике и устанавливаю делегирование для свойств AppDelegate.

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

    BandListViewController *bandList;
}

и

enter image description here

Тем не менее, я не могу понять, как я могу инициализировать свой BandListViewController, передав параметр paramater managedObjectContext, не устанавливая его в awakeFromNib. CRUDAppDelegate уже инициирует этот контроллер и устанавливает его собственный nib в navigationController, но затем, когда я пытаюсь создать новый BandListViewController в didFinishLaunchingWithOptions с initInManagedObjectContext, отображение (TableViewController) остается от старого bandList. (with 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 ]

1 голос
/ 20 июня 2011

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

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

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

0 голосов
/ 19 июня 2011

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

...