iOS 9.0 以下的分段控件 addTarget() 崩溃应用

Segmented control addTarget() crashing app below iOS 9.0

我的应用最近发布了,但它支持 iOS 8.2.

不幸的是,在 iOS 9.0 以下点击以编程方式添加的分段控件会使应用程序崩溃,控制台中没有错误消息。

我认为添加目标的行可能会导致问题:

以下行放在我的自定义单元格的 init() 中,分段控件是一个实例变量,并在其父视图控制器中调用一个方法

segmentedControl.addTarget(ListViewController(), action: #selector(ListViewController.segmentedControlToggled(segmentedControl:)), for: .valueChanged)

再次,这在 iOS 9.0.

下按预期工作

设置工作正常,只有在点击分段控件后才会崩溃。

选择器是否应该有另一种语法?

感谢任何建议!

根据 addTarget 的文档:

The control does not retain the object in the target parameter. It is your responsibility to maintain a strong reference to the target object while it is attached to a control.

这意味着您需要将 target 参数的值存储在某处,但您未能实现:

segmentedControl.addTarget(ListViewController(),...)

一旦没有其他引用,ListViewController 就会被释放,这里要记住的重要一点是你无法提前知道释放何时发生,因为你不知道不知道其他对象将如何引用您的对象。

为了确保目标不会被释放,将 ListViewController 实例存储到 属性.

崩溃并非特定于 iOS 版本,可能是在某些 iOS 版本上 ListViewController 被更快地释放。