Путаница в отношении initWithNavigationBarClass - как использовать (новый метод instanceType) - программирование

Путаница в отношении initWithNavigationBarClass - как использовать (новый метод instanceType)

Это отлично работает:

UINavigationController *nc =
    [[UINavigationController alloc]
    initWithNavigationBarClass:[GTScrollNavigationBar class]
    toolbarClass:[UIToolbar class]];
nc.viewControllers = @[firstPage];
self.window.rootViewController = nc;

но это работает не:

UINavigationController *nc =
    [[UINavigationController alloc]
    initWithNavigationBarClass:[GTScrollNavigationBar class]
    toolbarClass:[UIToolbar class]];
self.window.rootViewController = nc;
self.window.rootViewController.viewControllers = @[firstPage]; // ERROR

как это может быть? Благодаря

4b9b3361

Ответ 1

self.window.rootViewController.viewControllers = @[firstPage];

не компилируется, поскольку объявлено свойство rootViewController UIWindow как (общий) UIViewController (который не имеет свойства viewControllers), а не как UINavigationController.

Компилятор не "знает", что контроллер корневого представления фактически является навигацией контроллер в вашем случае.

Итак, либо вы действуете так же, как в первом кодовом блоке, или вам нужно добавить явное выражение:

((UINavigationController *)self.window.rootViewController).viewControllers = @[firstPage];