6

問題の説明

私は、単純でかなり一般的であるべき何かを達成しようとしています: バインディングに NSPopupButton を設定し、バインディングに NSTableView を設定します。Apple は、ポップアップ メニューを使用した対 1 関係の実装のドキュメントで、セル ベースのテーブルについてこれを説明しており、次のようになっています。

ここに画像の説明を入力

ビューベースのテーブルでこれを機能させることはできません。「作成者」ポップアップは、何をしても表示されません。

テーブル内の項目 ( Items ) 用と作成者 ( Authors ) 用の 2 つの配列コントローラーがあり、どちらもコア データ モデルのそれぞれのエンティティに関連付けられています。インターフェイスビルダーで次のように、セルに NSManagedPopup をバインドします。

  • コンテンツ->作成者(コントローラー キー: ArrangeObjects )
  • コンテンツ値->作成者(コントローラー キー: ArrangeObjects、モデル キー パス: name )
  • 選択したオブジェクト->テーブル セル ビュー(モデル キー パス: objectValue.author

ポップアップをテーブルの外のどこかに配置すると、正常に動作するので (明らかに選択を除いて)、バインディングのセットアップは問題ないと思います。


私がすでに試したこと

  1. 誰かがIBOutlet プロパティAuthors配列コントローラーに使用する回避策を提案しましたが、これも私にはうまくいかないようです。

  2. 別のSOの質問では、NSTableCellViewをサブクラス化し、必要な接続をプログラムで確立することが提案されました。私はこれを試しましたが、限られた成功しかありませんでした。

    次のようにバインディングをセットアップすると:

    - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
        NSView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
    
        if ([tableColumn.identifier isEqualToString:@"Author") {
            AuthorSelectorCell *authorSelectorCell = (AuthorSelectorCell *)view;
            [authorSelectorCell.popupButton bind:NSContentBinding toObject:self.authors withKeyPath:@"arrangedObjects" options:nil];
            [authorSelectorCell.popupButton bind:NSContentValuesBinding toObject:self.authors withKeyPath:@"arrangedObjects.name" options:nil];
            [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author" options:nil];
        }
    
        return view;
    }
    

    ポップアップには可能な作成者のリストが表示されますが、現在の選択は常に「値なし」と表示されます。追加すると

    [authorSelectorCell.popupButton bind:NSSelectedValueBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];
    

    現在の選択は完全に空です。現在の選択を表示する唯一の方法は、設定することです

    [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];
    

    プロパティに を割り当てようとするため、別の作成者を選択するとすぐに壊れNSString*ますAuthor*

何か案は?

4

4 に答える 4

8

私も同じ問題を抱えていました。これが可能であることを示すサンプル プロジェクトを Githubに置きました。

誰かが IBOutlet プロパティを Authors 配列コントローラーに使用する回避策を提案しましたが、これも私にはうまくいかないようです。

これは私にとってうまくいったアプローチであり、サンプルプロジェクトで示されています。パズルの欠けている部分は、配列コントローラーへの IBOutlet が、TableView のデリゲートを提供するクラスにある必要があるということです。

于 2014-01-11T10:50:10.927 に答える
0

同じ問題があり、この回避策を見つけました- 基本的に、作成者の配列コントローラーを IBOutlet を使用してペン先から取り出し、ファイル所有者を介してそれにバインドします。

于 2013-02-18T11:01:07.627 に答える