1

設定

私は持っていNSCollectionViewます。にチェックボックスがありますView PrototypeCard Titleとが入力されるようにバインディングを正常にセットアップしましたaction。(下の画像1)

ゴール

CardModelチェックボックスをクリックすると、View Prototypeすでにアクセスできる特定のものにアクセスする関数を実行したいと思います。次に、それに応じてデータを操作します。

リサーチ

私はSOでこの記事を見つけました: NSCollectionViewItem NSButton click のpresentedObject値を取得してください。これは私の状況をかなりよく説明しています。残念ながら、答えは特定のコードなしです。提案されているのは次のとおりです。

したがって、最初に、ボタンのセルの表現されたオブジェクトを、ボタンを所有するコレクション ビュー アイテムに設定します。(nib エディターでこれを行うことができます。) 次に、アクション メソッドで、ボタンのセルを取得し、次にセルの表現オブジェクト (アイテム)、アイテムの表現オブジェクトを取得します。

単純に思えますよね?

試みられた解決策

メソッドを作成cardCheckBoxClicked:し、チェックボックスに接続します。

上記のアドバイスに従って、button cellのコンセントrepresentedObjectをに接続しCard Collection View Itemます。(画像2)

Card Collection View Item次に、コード内のを取得しようとrepresentedObjectします。

からMainWindowController.h:

-(IBAction)cardCheckBoxClicked:(id)sender
{
    CardModel* cModel = [[sender representedObject] representedObject];

    NSLog(@"card title: %@",cModel.title);
}

エラー

チェックボックスをクリックすると、次のエラーが表示されます。

-[NSButton representedObject]: unrecognized selector sent to instance 0x6080001581b0

質問!

では、の表現されたオブジェクトにアクセスするにはどうすればよいでしょうか? button cell上記のアドバイスを誤解していましたか?必要なデータにアクセスするにはどうすればよいですか?

画像(参考)

バインディングの例 ここに画像の説明を入力

表現されたオブジェクト接続 ここに画像の説明を入力

4

2 に答える 2

4

これはここです:

-[NSButton representedObject]:

クラス NSButton に、presentedObject メソッドを実行するように依頼していますか。クラスとそのクラスのオブジェクトまたはインスタンスを区別してください。

実際のボタンを取得し、そのボタン セルを取得し (少なくとも、それが必要だと思います)、セルでpresentedObject を呼び出す必要があります。私があなたを正しく理解しているなら。私はインターフェイス ビルダーに触れたことがないので、ここにあなたが求めているものと一致する完全に構成されたコードを示します。

someObject = [[theButton cell] representedObject];
于 2014-07-02T21:59:24.697 に答える
0

CHバッキンガムの答えに加えて、バインディングの使用も検討する必要があります。チェックボックスの値バインディングをコレクション ビュー アイテムにバインドすることができrepresentedObjectます。これには、 CardModel. (必要に応じて、キー パスはモデル オブジェクト グラフを通過し続けることができます。)これにより、ボタンが切り替えられるたびにそのプロパティが設定されます。

于 2014-07-03T00:23:40.793 に答える