2017-07-09 19 views
0

NSTableview私はNSArrayControllerにバインドされています。 selectionIndexesは、arrayControllerのselectionIndexesにバインドされています。 このarrayControllerはNSManagedObjectContextにバインドされています。NSTableViewで選択行を取得するには? view(atColumn:row:makeIfNecessary :) return nil

arrayControllerのselectsInsertedObjectsがtrueであるため、オブジェクトをNSManagedObjectContextに追加すると、tableViewSelectionDidChange(_ notification: Notification)が呼び出されます。私はここにブレークポイントを設定し、コンソールでのデバッグは、(私は自分自身にテーブルビューのデリゲートを設定):私はテーブルビューでサーバル行を見ることができます

(lldb) po selectedRow 
11 
(lldb) po selectedCell() 
nil 
(lldb) po numberOfColumns 
2 
(lldb) po numberOfRows 
12 
(lldb) po view(atColumn: 0, row: 0, makeIfNecessary: false) 
nil 
(lldb) po view(atColumn: 0, row: selectedRow, makeIfNecessary: false) 
nil 

しかし、なぜpo view(atColumn: 0, row: 0, makeIfNecessary: false)が返されますか?

デリゲートメソッドtableViewSelectionDidChange(_ notification: Notification)で選択した行を取得するにはどうすればよいですか?

+0

選択した行は11です。セルビューは再利用されます。テーブルビューは、すべての行を描画する1つのビューを作成できます。あなたは何をしたいですか? – Willeke

+0

@Willeke選択した行を取得してプロパティを変更したいとします。新しいものを作成しないでください。 – LinShiwei

+0

'tableView(_:viewFor:row:)'のプロパティを変更してください。 – Willeke

答えて

0

テーブルビューは、レイアウトを更新する前にNSTableViewSelectionDidChangeNotificationと表示されていると思われます。したがって、サブビューを作成する前に、サブビューをテーブルビューに要求しています。

これはmakeIfNecessaryのパラメータです。この方法で試してください:

po view(atColumn: 0, row: selectedRow, makeIfNecessary: true) 
+0

私は手動で行を作成したくありません。私は自動的に作成された選択行を取得したい。 'poビュー(atColumn:0、row:0、makeIfNecessary:false)'が返されない理由を説明できますか?テーブルビューにはまさに行があり、その行が表示されます。 – LinShiwei

+0

上記のコメントのdebugコマンドの結果によると、ちょうど12行(1ではなく)があります。 – Mozahler

関連する問題