Путаница с UINavigationControllers в SplitViewController

Я настраиваю приложение для iPad, которое использует SplitViewController. В моем делегате приложения у меня есть следующее в didFinishLaunchingWithOptions:

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *leftNavController = [splitViewController.viewControllers objectAtIndex:0];
LeftViewController *leftViewController = (LeftViewController*)[leftNavController topViewController];
DetailViewController *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
NSLog(@"Detail View Ctrl >> %@", [detailViewController class]);

Когда я запускаю приложение, инструкция NSLog возвращает «UINavigationController», когда DetailViewController фактически является подклассом UIViewController. Однако в XCode автозавершение кода показывает все методы, реализованные в подклассе DetailViewController. Любые идеи? Спасибо!


person Pheepster    schedule 09.04.2014    source источник


Ответы (1)


Я думаю, что ваш DetailViewController на самом деле встроен внутри UINavigationController, и ваша четвертая строка ошибочна. Вместо этого взгляните на topViewController для второго контроллера представления внутри вашего контроллера разделенного представления, так же, как вы это делаете для LeftViewController.

Причина, по которой Xcode продолжает предлагать завершение для методов DetailViewController, заключается в том, что вы дали ему этот тип. Завершение кода не зависит от поведения во время выполнения (как это могло быть?), вместо этого оно зависит от статического анализа кода, который вы вводите. Если вы сообщите Xcode, что что-то является DetailViewController, он поверит вам и выполнит автозаполнение на основе этой информации.

person Tim    schedule 09.04.2014