2016-06-28 5 views
0

Я пытаюсь создать пользовательский NSViewController и просто зарегистрировать что-то в viewDidLoad. В iOS это очень тривиально и отлично работает. Однако, когда я устанавливаю contentViewController на NSWindow (который, как я предполагаю, похож на RootViewController в iOS?), Он пытается загрузить его с наконечника.Простое приложение Cocoa с ViewController

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 


    self.ABViewController = [[ABViewController alloc] init]; 

    self.window.contentViewController = self.ABViewController; 


} 

2016-06-28 09: 15: 42,186 TestApp [32103: 33742217] - [NSNib _initWithNibNamed: Bundle: опции:] не может загрузить nibName: ABViewController в пачке (нуль).

Какие предположения я теряю о том, как какао отличается от iOS, что мешает мне просто настроить viewController?

ответ

0

NSViewController не имеет такое же поведение, как UIViewController, в том, что он не будет автоматически знать, чтобы искать бобы файл с таким же именем, как и сами по себе. Другими словами, он не будет автоматически знать, как искать файл ABViewController.nib.

Самый простой способ исправить это просто переопределить метод nibName в ABViewController:

@implementation ABViewController 

- (NSString *)nibName { 
    return NSStringFromClass([self class]); 
} 

@end 

Обратите внимание, что использование NSStringFromClass() обычно лучше, чем пытаться жестко закодировать строку, так как этот способ выжить рефакторинга.

Вы можете позвонить [[ABViewController alloc] init]; как раньше и NSViewController «s по умолчанию init метод получит острия название вашего переопределен nibName метода.

0

Похоже, что ваша программа не найдет файл, в котором определены представления. Вам нужно сделать что-то подобное для раскадровки:

UIStoryboard *sboard = [UIStoryboard storyboardWithName:@"StoryboardFileName" 
              bundle:NSBundle.mainBundle()]; 
SecondViewController *vc1 = [sboard instantiateInitialViewController];