KVO exc_bad_access(代码=1)

Posted

技术标签:

【中文标题】KVO exc_bad_access(代码=1)【英文标题】:KVO exc_bad_access (code=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,因此错误可能是由于将测试代码注入应用程序代码而导致的。

有人帮忙吗?

【问题讨论】:

【参考方案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 不错。

以上是关于KVO exc_bad_access(代码=1)的主要内容,如果未能解决你的问题,请参考以下文章

当我在 iPad 上运行时,我的游戏一直在说“EXC_BAD_ACCESS(code=1, address=0xb176e978)”

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)错误

代码错误:线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)

调用按钮操作时的 EXC_BAD_ACCESS(代码 = 2 或代码 1)

带有变量的 NSFont 文本大小:EXC_BAD_ACCESS(代码=1,地址=0X3)

线程1:EXC_BAD_ACCESS(代码=1,地址=0x48)avaudiofoundation