Объркване с 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