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
被更快地释放。
我的应用最近发布了,但它支持 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
被更快地释放。