0

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

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

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

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

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

同样,这在 iOS 9.0 中也可以正常工作。

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

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

感谢您的任何建议!

4

1 回答 1

2

根据addTarget的文档:

控件不保留目标参数中的对象。当目标对象附加到控件时,您有责任保持对目标对象的强引用。

这意味着您需要将target参数的值存储在某处,而您无法实现:

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

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

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

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

于 2017-02-05T13:32:36.080 回答