2

次のコードがiOS6で正常に機能するのはなぜですか。しかし、iOS 5では、デバイスがクラッシュする原因となる無限ループに巻き込まれます。「self.footerView=...」という行が実行されると、viewForFooterInSectionが再度呼び出されます。したがって、それを無限ループに閉じ込めます。

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if (!self.footerView)
        self.footerView = [[UIView alloc] initWithFrame:[tableView rectForFooterInSection:section]];

    return self.footerView;
}

これを行うためのより良い方法はありますか?これがiOS6で機能するのに、5では機能しないのはなぜですか?

よろしく、

ピーター

4

2 に答える 2

1

ビュー フレームを計算するためにrectForFooterInSectionデリゲート メソッドを呼び出している可能性が非常に高いです。tableView:viewForFooterInSection:

これが無限ループに入ることは、私には理にかなっているように思えます (そして予想されます)。

基本的に、footerViewfor セクションxはof セクションUIViewと同じフレームであり、返されることになっているものとまったく同じであると言っています。ここで再帰的な問題がわかりますか?footerViewx

iOS 6 では、無限ループを防止するいくつかの実装変更があったようです (おそらく、フッター フレームのデフォルト値に依存している可能性があります)。それでも、上記のデリゲート メソッドの実装は間違いなく間違っています。

独自に定義footerViewし、デリゲート メソッドで返す必要があります。

于 2012-12-07T00:58:17.277 に答える