【问题标题】:KVO exc_bad_access (code=1)KVO exc_bad_access(代码=1)
【发布时间】:2014-10-17 16:23:28
【问题描述】:
- (void)setTableView:(UITableView *)tableView {
  _tableView = tableView;
  [_tableView addObserver:self
               forKeyPath:@"frame"
                  options:0
                  context:nil];
  [self updateFrame];
}

exc_bad_access 在尝试添加观察者时发生。

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

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

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

有人帮忙吗?

【问题讨论】:

    标签: ios deadlock exc-bad-access key-value-observing xctest


    【解决方案1】:

    有几件事。

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

    接下来我假设您列出的功能驻留在 UIViewController 中? UIViewController 没有 frame 属性。它的视图确实如此(你的 tableView 也是如此)。我不确定您要观察哪个帧,但您可以尝试:

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

    或者

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

    【讨论】:

    • "NSKeyValueObservingOptions 结构没有 0 的条目。" - 没错,但 Apple 的 NSKeyValueObservingOptions 文档说:“如果您不需要更改字典值,您可以传递 0”。
    • herzbube 不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2018-03-13
    • 2013-10-11
    • 2019-07-11
    • 2020-02-01
    相关资源
    最近更新 更多