3

実行時に高さが変化するUITableViewがあります。アプリは画像を読み込み、TableViewに表示します。テーブルビューのフッターにプルのような機能を実装しました。

行の高さが一定ではないため、UITableViewにオブザーバーを追加しました。

[self.tableView addObserver:_refreshFooter
                 forKeyPath:@"contentSize"
                    options:NSKeyValueObservingOptionNew
                    context:NULL];

私の_refreshFooterでは、contentSizeが変更されるとすぐに次のメソッドが呼び出されます。

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
  UITableView *tbV = object;

  float realBottom = MAX(tbV.frame.size.height, tbV.contentSize.height);
  self.frame = CGRectMake(self.frame.origin.x,
                          realBottom,
                          self.frame.size.width,
                          self.frame.size.height);
}

アプリは基本的にタブバーアプリであり、各タブはTableViewControllerのインスタンスです。5.0.1および5.1のiPhone4および4Sでは、KVOが原因でクラッシュが発生したことはありませんが、フッターが動かなかったりクラッシュしたりするなど、予期しない動作が発生したとユーザーから言われています。

発生したクラッシュは次のとおりです。

0   libobjc.A.dylib 0x3671bf78 objc_msgSend + 15
1   Foundation 0x31145659 NSKeyValuePushPendingNotificationPerThread + 68
2   Foundation 0x3113774b NSKeyValueWillChange + 414
3   Foundation 0x3110e84f -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 182
4   Foundation 0x31190b23 _NSSetSizeValueAndNotify + 82
5   UIKit 0x32368f8d -[UITableView(_UITableViewPrivate) _updateContentSize] + 572
6   UIKit 0x3249cd51 -[UITableView setTableFooterView:] + 432
4

1 に答える 1

2

リリースNSKeyValueObservingOptionNewviewWillDisapperて、これを追加しますviewWillAppear

于 2012-05-17T14:22:55.757 に答える