1

私のアプリには、NSOutlineViewからデータを取得する がNSTreeControllerあり、これはコア データ モデルからデータを取得します。

私が今やりたいことは、グループの見出しと、場合によっては追加の行をアウトライン ビューに追加することです。これは明らかに、モデルの外に存在し、ビューの一部であるべきものです。しかし、これについて頭を悩ませている限り、基になるモデルを変更せずにアウトラインビューにこれらのものを表示させる方法は考えられません。これは明らかに大きな問題です。

よろしくお願いいたします。ここで明らかな何かが欠けているような気がします...

4

1 に答える 1

4

ここで行うことは、カスタムNSTreeControllerサブクラスを作成することです。これが、これがあなたがしたい変更のための完璧な場所である理由です:

  • あなたが言ったように、それはモデルにはありません。
  • ビューとは何の関係もありません-完全に透明です。
  • 基本的に必要なのは、保存されたデータから表示データを作成することです<-これはコントローラーのタスクです。

幸いなことに、CocoaのControllerクラスは非常に強力であり、同時に非常に単純です。-arrangedObjectsあなたにとっては、メソッドをオーバーライドするだけで十分なはずです。述語の適用や並べ替えなどの多くの便利なことを行うため、デフォルトの実装を再利用します。これは次のようになります。

- (id)arrangedObjects {
  id root = [super arrangedObjects];

  // "root" is something like a NSTreeNode but not quite yet
  NSTreeNode *newRoot = [NSTreeNode treeNodeWithRepresentedObject: nil];
  [[newRoot mutableChildNodes] setArray: [root childNodes]];

  // Do your customizations here

  return newRoot;
}

返されるオブジェクトはクラスのNSTreeNodeものです。変更を行う方法については、ドキュメントを参照してください。

于 2010-11-14T18:01:39.153 に答える