2017-09-02 14 views
0

NSSplitViewのカスタムをNSSplitViewControllerとしたいと思います。NSSplitViewControllerでカスタムNSSplitViewを設定するには?

docsは言う:

To provide a custom split view, set this property at any time before you call super in the inherited viewDidLoad() method; that is, before the split view controller’s isViewLoaded property is true.

マイNSSplitViewControllerサブクラスがMainVCと呼ばれています。

私は[super viewDidLoad]を呼び出す前に-viewDidLoadで私のカスタム分割ビューを設定してみました:

- (void)viewDidLoad { 
    self.splitView = [MySplitView new]; 
    [super viewDidLoad]; 
    // Rest of viewDidLoad... 
} 
が、それはうまくいきませんでした。私も loadViewをオーバーライドしようとした

2017-09-02 10:35:43.527312-0700 Zee[6497:632581] ** * Assertion failure in -[MainVC setSplitView:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppKit/AppKit- 1561/Controllers/NSSplitViewController.m:220

2017-09-02 10:35:43.527558-0700 Zee[6497:632581] MainVC: The -splitView can only be assigned before the view is loaded

:私は、次のエラーを得た

- (void)loadView { 
    self.splitView = [MySplitView new]; 
    [super loadView]; 
} 

しかし、私は得る:

2017-09-02 10:39:39.377345-0700 Zee[6575:639146] ** * -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array

私は[super loadView]を呼び出した後に割り当てを行う場合、私は同じことを得ます-viewDidLoadで試してみたときのエラーです。

私のNSSplitViewControllerサブクラスでカスタムNSSplitViewを使用するにはどうすればよいですか?

+1

NSSplitViewControllerを使用してカスタム分割ビューを作成する必要があるのはなぜですか? NSSplitViewとNSSplitViewControllerの両方をサブクラス化することで何を得ようとしていますか? –

+0

@ LucasDerraugh私は仕切りの外観をカスタマイズし、NSSplitViewのサブクラス化をしたいと思っています。 – sam

答えて

1

インデックスの範囲外の問題は、初期化で間違っているものではなく、コンテンツを持たないスプリットビューに関連しています。初期化をloadViewに残しておくと問題ありません。提示する前にNSSplitViewControllerサブクラスを少なくとも2つのNSSplitViewItemsで初期化していることを確認してください。ここでは一例です。このスレッドで

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    MySplitViewController *vc = [MySplitViewController new]; 
    vc.splitViewItems = @[ 
     [NSSplitViewItem splitViewItemWithViewController:[MyViewController new]], 
     [NSSplitViewItem splitViewItemWithViewController:[MyViewController new]] 
    ]; 
    self.window.contentViewController = vc; 
} 
1

受け入れ答えは、技術的に正しいですが、(当然)私はどこにも文書化見つかっていないNSSplitViewControllerのバグをミス。このようなココアの開発の状態が2017年にあり、私はとにかく

...と思い、問題はこれです:あなたが私に似ているとちょうど1ビューのNSSplitViewその開始NSSplitViewControllerを使用したい場合は、上記のサブクラス化のアプローチはうまくいかず、OPからの索引付けエラーが発生します。 NSSplitViewはちょうど1つでうまく動作しますが、NSSplitViewItemがそこに常駐していると仮定するプライベートメソッド(除算器を描画するための方法)があります。私は両方のNSSplitViewControllerNSSplitViewをサブクラス化し、私は1つのビューのみを持っているものを作成して、ロード・フェーズが落ち着いた後に削除される空白NSViewControllerインスタンスにスワップ場合のチェックを提供してやってしまった何を

。私はまた、 splitViewController.splitViewItems = ...の設定がうまく動作しないことを発見しました。これを行うには addSplitViewItem:に電話をかけてください。おそらく、あなたが逃したシーンの裏にはいくつかのものがあります。

このクラスは全体的には非常に便利ですが、面倒なことには文書化されていません。もしあなたが旅行者であり、これを見つけるなら、それが助けてくれることを願ってください。

+0

追加色ありがとう。 – sam

関連する問題