KVO exc_bad_access(code = 1)

问题描述:

- (void)setTableView:(UITableView *)tableView { 
    _tableView = tableView; 
    [_tableView addObserver:self 
       forKeyPath:@"frame" 
        options:0 
        context:nil]; 
    [self updateFrame]; 
} 

exc_bad_access在尝试添加观察者时发生。KVO exc_bad_access(code = 1)

在汇编代码中,错误代码是'NSKeyValueObserverRegistrationLock'。

不知道是什么原因导致了错误。

我正在运行XCTest,因此可能有错误是由将测试代码注入应用程序代码引起的。

有人帮忙吗?

一些事情。

您应该定义您的选项参数。 NSKeyValueObservingOptions结构不具有0的条目。如果您在新值之后,则使用NSKeyValueObservingOptionNew。

接下来我假设列出的函数驻留在UIViewController中? UIViewController没有框架属性。它的视图虽然(你的tableView也是这样)。我不知道你要观察哪些框架,但你可以尝试:

[_tableView addObserver:self.view 
       forKeyPath:@"frame" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 

或者

[_tableView addObserver:tableView 
       forKeyPath:@"frame" 
        options:NSKeyValueObservingOptionNew 
        context:NULL];