2012-05-17 90 views
3

我有一个UITableView,其高度在运行时更改:应用程序加载图像,然后将它们显示在TableView中。我已经实现了一个拉刷新功能一样为我的tableview的页脚KVO意外崩溃

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

在我_refreshFooter,下面的方法被立即调用的contentSize的变化:

由于行的高度不是恒定的,我已经在我的UITableView增加一个观察者

- (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); 
} 

该应用程序基本上是一个的TabBar应用,其中每个选项卡是TableViewController的一个实例。 在我们的iPhone 4和4S在5.0.1和5.1,我们从来没有经历过由于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 
+0

你在哪里删除此观察员? – rishi

+0

在viewDidUnload在我的UITableViewController但它从来没有所谓,因为viewControllers不需要运行 – Lowip

+0

你需要释放,在viewWillDisappear期间卸载。 – rishi

回答

2

发布NSKeyValueObservingOptionNewviewWillDisapper并添加这是viewWillAppear