iphone - KVO 意外崩溃

标签 iphone objective-c ios

我有一个 UITableView,它的 height 在运行时发生变化:应用程序加载图像,然后将它们显示在 TableView 中。我已经为我的表格 View 的页脚实现了类似拉动刷新的功能。

由于行的高度不是恒定的,我在我的 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 中的 iPhone 4 和 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

最佳答案

viewWillDisapper 中释放 NSKeyValueObservingOptionNew 并添加这是 viewWillAppear

关于iphone - KVO 意外崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636982/

相关文章:

objective-c - 提交新故事时为"You broke Reddit"

iphone - 在 iPhone 网络应用程序中使用单选按钮的最佳方式是什么?

iphone - 用于 iPhone 开发的 iPod touch

c# - ios monotouch 的 UIProgressView 跟踪下载状态

ios - iPhone 6 plus 尺寸显示为 375.0 x 667.0?

iOS "Gboard"应用程序,UIKeyboard 通知高度错误或无效

objective-c - NSView如何覆盖按钮?

objective-c - 为什么在使用 objc 运行时库中的 class_replaceMethod 调配函数时 ARC 会导致 EXC_BAD_ACCESS?

iOS WebView,固定图像 src 名称,动态创建图像(nsdata、nsbundle、nsurl)?

ios - Xcode UI 测试登录用户重定向到主屏幕