почему это другой код «addSubView» вызывает различия в поведении

Почему изменение приведенного ниже кода со старой записи на новую устраняет следующую проблему.

Код:

  // OLD Entry - Did not work
  //[self.window addSubview:navigationController.view];

  // NEW Entry - Fixed it
  self.window.rootViewController = self.navigationController;

Проблема при использовании старого кода:

  • Я использую UINavigationController и имею UITableViewController "mainView", а затем представление 2-го уровня, которое я помещаю в стек, назовем его UITableViewController "detailView" .

  • Обычная навигация назад и вперед от основного к деталям работает нормально

  • НО при автоматическом запуске при запуске во втором представлении (при сохранении состояния) я перехожу ко второму представлению ОК, однако КНОПКИ ПАНЕЛИ ИНСТРУМЕНТОВ НЕ появляются на внизу 2-го вида в этом случае. Когда я возвращаюсь на главную страницу (через стандартные механизмы UINavigationController), а затем выбираю строку в UITableView и снова возвращаюсь в то же представление, элементы панели инструментов отображаются нормально.

  • Не удалось отследить это, но, наконец, через Метод проб и ошибок. Я заметил, что это изменение в коде (см. выше) в appDelegate (из всех мест), похоже, решает проблему.

Есть идеи?

РЕДАКТИРОВАТЬ: Для полноты изложения вот полный метод

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
    NSManagedObjectContext *context = [self managedObjectContext];
    if (!context) {
        abort();  // TODO: Do better job here than abort
    }
    rootViewController.managedObjectContext = context;
     self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

РЕДАКТИРОВАТЬ 2: О, у меня есть файл NIB и настройки корневого контроллера / окна представления в построителе интерфейса - так что мне интересно, могу ли я m смешивание здесь NIB и программного подхода, что может вызвать проблемы?

РЕДАКТИРОВАТЬ 3: Также отмечалось, что следующий код didFinishLaunchingWithOptions работал, когда я добавил строку «self.window.rootViewController = self.navigationController». То есть без этой строки (это то, что делает пример coredatabooks), у меня возникает проблема.

RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
    rootViewController.managedObjectContext = self.managedObjectContext;
    self.window.rootViewController = self.navigationController;  // WORKS WHEN I ADD THIS LINE IN FOR SOME REASON???

    // Configure and show the window
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];

return YES;
8
задан Greg 23 April 2011 в 02:07
поделиться