Вы можете назначить объект переменной, объявленной как ее суперкласс.Это не проблема и очень полезно, когда вы хотите использовать методы суперкласса только над набором ваших собственных подклассов, особенно это часто встречается в контроллерах представления в стеке навигации, когда конкретный тип следующего контроллера представления неизвестен.Также подумайте об этом.Такие методы, как
[self presentModalViewController:customController animated:YES];
не будут работать без возможности сделать это.Этот метод объявлен как принимающий UIViewController *, но вы передаете пользовательский подкласс UIViewController без жалоб.Наконец
[rootViewController isKindOfClass:[UIViewController class]];
вернет ДА.QED.
Вы уже объявили свой класс RootViewController в заголовке для вашего делегата приложения?то есть
@class RootViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate> {
....
Правильно ли вы написали?Это общая область для неправильного ввода, поскольку xCode не выполняет автозаполнение форвардных объявлений.Затем он автоматически завершит вашу опечатку в остальной части файла заголовка.
Не забыли ли вы импортировать файл заголовка для RootViewController в файл .m для AppDelegate?Вам все равно нужно будет это сделать, чтобы компилятор знал об инерционности.
В данный момент ваш код выглядит правильно, но у нас его нет.