UITableViewクラスで非常に奇妙で予期しない動作が検出されました。私は私のセクションの最後の表のセルが他のセルと異なる高さである必要があり、私は基本的にこれをやっている:numberOfRowsInSectionを呼び出す:heightForRowAtIndexPathから
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
return 44;
else
return 88; //double size for all but the last row
}
はかなりストレートなようだが、私はそれを実行したとき、私は無限を取得しますループし、クラッシュします。 numberOfRowsInSection:
と呼ぶと、データソースのtableView: numberOfRowsInSection:
メソッドが呼び出されます。これはテーブルビューのメソッドがデータソース値のキャッシュされたバージョンを返すので理にかなっているので、最初にデータソースから値を取得する必要があります。しかし、それはheightForRowAtIndexPathを呼び出し、indexPath [0、0]をもう一度渡します!そして、これはノンストップです。
私の代わりに(代わりにtableViewの方法の私のデータソースメソッドを呼び出す)
[self tableView:tableView numberOfRowsInSection:indexPath.section]
を使用して、それを回避することができました。それがなぜこれを行うのか誰もが知っていますか?これは定義された動作ですか?またはAppleのTableViewフレームワークのバグ?
Appleの内部処理のようです。私はAppleのエンジニアがこれに答える必要があると思う。 – Altealice
は、44.0と88.0に浮動してはなりませんか? – railwayparade
コンパイラにフロートであることを伝えるのは技術的にはもっと効率的かもしれませんが、パフォーマンスの違いはそれほどありません。私が持っている浮動小数点は、最後にポイント0を持つでしょう、そのように書かれて、私は問題に遭遇していません... – GendoIkari