WindowControllerとViewController

1Windowのアプリを作っていると内部に色々ビューを作って表示を分離するけど、
その結果、ビューが多くなり、付随するコントローラとかオブジェクトとか増えて収拾不能寸前になりかけていつも苦労してる。

そこで、ViewController単位で分離する方法をGoogleしてみたら、見つかった。(けどURLは覚えてない)

WindowController側でDidLoadNIbしたときに、外部Nibを使用してViewControllerを作成し、ビューを組み入れる

WindowController側

- (void)windowControllerDidLoadNib:(NSWindowController *)aController {
  [superwindowControllerDidLoadNib:aController];
  // Add any code here that needs to be executed once the windowController has loaded the document's window.
 
  // prepare tableView
  self.tableViewController = [[ADDTableViewControlleralloc] initWithNibName:@"ADDTableViewController"bundle:nil];
  self.tableViewController.view.frame = self.customView.frame;
  [self.tableViewController.viewsetFrameOrigin:NSZeroPoint];
  [self.tableViewControllersetManagedObjectContext:self.managedObjectContext];
 
  NSTabViewItem* tableItem = [[NSTabViewItemalloc] init];
  [tableItem setView:self.tableViewController.view];
  [tableItem setLabel:@"TableView"];
  //[self.customView addSubview:self.tableViewController.view];
  [self.customView addTabViewItem:tableItem];

前提として、customViewという変数名でWindowにViewが配置してある(このケースでは、NSTabView)

ViewController側

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

必要ならここで、何かする。

こんな感じで分離することで、見通しが随分良くなるはず。
CoreData使ってるなら、NSManagedObjectControllerを渡しておくと良い感じ。

Leave a Reply

Your email address will not be published. Required fields are marked *