我正在尝试设置CALayer
的委托,以便我可以使用draw(_:in:)
。 documentation描述了如何执行此操作。但是一旦我设置了委托,就会出现运行时错误:
主题1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)
这是生成错误的代码。在Xcode 8.2.1中的单视图应用程序模板中替换ViewController.swift
:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myLayer = CALayer()
myLayer.delegate = LayerDelegate()
view.layer.addSublayer(myLayer)
}
}
class LayerDelegate: NSObject, CALayerDelegate {
}
答案 0 :(得分:2)
该对象已从内存中删除,因为没有强引用。正如另一个@Robert指出的那样,CALayer
' delegate
是weak
,一旦你离开范围,即viewDidLoad()
函数,该对象就会被删除来自记忆。
您需要确保它未被释放。您可以向班级添加属性。只要班上生活,这就会存在。
class ViewController: UIViewController {
let layerDelegate = LayerDelegate()
override func viewDidLoad() {
super.viewDidLoad()
let myLayer = CALayer()
myLayer.delegate = layerDelegate
view.layer.addSublayer(myLayer)
}
}