0

内部に NSButtonCell (チェックボックス) を持つ NSTableColumn を持つ NSTableView があり、行が追加されるたびに NSButtonCell の新しいインスタンスを生成します。これは IB で構成しました。ただし、次のコードのチャンクで 2 番目の NSLog が 0 を返す理由に興味があります。

NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]);
[[self.tableView preparedCellAtColumn:0 row:0]setState:1];
NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]);

0 を返すということは、NSButtonCell のインスタンスにメッセージを送信していることを意味しますよね? では、なぜ setState: は 2 番目の NSLog の戻り値を変更しないのでしょうか?

4

1 に答える 1

0

受信nilしていた場合は印刷もされるので0、これを試すことをお勧めします

NSLog(@"cell:%@", [self.tableView preparedCellAtColumn:0 row:0])

テーブル ビューから実際に有効なセル オブジェクトを取得していることを確認します。

どこからそのコードを呼び出していますか? テーブルがすでに表示された後ですか?初期化中?

前者の場合、使用可能なセルが存在する必要があります。後者の場合、まだプールから作成または再割り当てされていない可能性があります。

上記のコマンドを試して、テーブル ビューからではNSLogなく、実際にセルを取得していることを確認してください。nil

于 2014-01-26T07:46:15.323 に答える