【问题标题】:iOS 9.1 Crashes App when Accessibility Inspector is On当 Accessibility Inspector 打开时,iOS 9.1 应用程序崩溃
【发布时间】:2015-10-26 20:52:30
【问题描述】:

我正在使用 HockeyApp 进行崩溃报告。我注意到只有 iOS 9.1 经常发生崩溃。当文本字段成为第一响应者并触发设置 UITableView 委托时,就会发生崩溃。起初我很难复制,但现在我可以一直复制。我所要做的就是打开辅助功能检查器,我的应用程序就会崩溃。崩溃的原因是“原因:在当前参数寄存器中找到的选择器名称:_accessibilitySetRetainedValue:forKey:”并且崩溃是“SIGSEGV”。关于如何解决此问题的任何想法?

【问题讨论】:

  • 您的UITableView 是否已经有一个委托并且您正在为其设置一个新委托?
  • 是的。 UITextField 用于搜索,并且委托发生了变化,因此需要更新。

标签: ios crash uiaccessibility hockeyapp


【解决方案1】:

我们遇到了类似的事情,最终是由于以下原因造成的:

@property (nonatomic, strong) id<UITableViewDelegate> delegate;
@property (nonatomic, strong) UITableVIew *tableView;

...

self.delegate = newDelegate;
self.tableView.delegate = newDelegate;

原始委托被解除分配,这通常不会成为问题。但据我们所知,当启用可访问性时,其中的某些东西有一个对原始委托的 assign 引用,而当设置了新委托时,有一些东西试图清除该引用。哪个已经不存在了。

TL;DR:在将新委托分配给 tableview 之前,不要释放原始委托:

self.tableView.delegate = newDelegate;
self.delegate = newDelegate;

【讨论】:

  • 这正是正在发生的事情。谢谢!
  • 遇到了同样的事情,除了设备上的 VoiceOver 本身。我最好的猜测是,VoiceOver 可能会添加对某些对象的 strong 引用,以便它可以在需要(或其他)时继续说话。在多强参考场景中,您总是不得不将弱代理清零等等......我想我们现在处于一个即使对于单强场景也需要清零代理的情况,因为 VoiceOver 可能会添加其他强项。再一次,这还没有证实它确实如此,但闻起来有点像。也许可以进行引用计数测试!
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多