我的应用最近发布了,但它支持 iOS 8.2。
不幸的是,在 iOS 9.0 以下点击以编程方式添加的分段控件会使应用程序崩溃,并且控制台中没有错误消息。
我认为添加目标的行可能会导致问题:
以下行放在我的自定义单元格的 init() 中,分段控件是一个实例变量,并在其父 View Controller 中调用一个方法
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
被释放得更快。
关于swift - iOS 9.0 以下的分段控件 addTarget() 崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052555/