У меня есть настраиваемый UIView, который включает настраиваемый CALayer для рисования некоторых фигур и воспроизведения анимации. Последние пару выпусков приложения оно работало без проблем. Последняя опубликованная версия постоянно дает сбой на iOS 9, но работает с другими версиями iOS.
В журнале ошибок на Crashlytics отображается EXC_BAD_ACCESS KERN_INVALID_ADDRESS
, а трассировка стека указывает конструктор настраиваемого представления как the root cra sh.
Вот упрощенный пример, который дает сбой на моем устройстве iPad Mini 2 iOS 9, но работает на моих новых моделях.
import UIKit
class CustomView: UIView {
private let customLayer: CustomLayer = CustomLayer()
init(color: UIColor) {
super.init(frame: .zero)
self.customLayer.color = color
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
override func didMoveToWindow() {
super.didMoveToWindow()
setupAnimation()
}
private func setupAnimation() {
...
}
}
fileprivate class CustomLayer: CALayer {
var color: UIColor = .white
override init() { super.init() }
override init(layer: Any) { super.init(layer: layer) }
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
override func draw(in ctx: CGContext) {
// Some CoreGraphics drawing commands
}
}