3
draw(_:in:)
을 사용할 수 있도록 CALayer
의 위임을 설정하려고합니다. documentation에는이를 수행하는 방법이 설명되어 있습니다. 그러나 대리자를 설정하자마자 런타임 오류가 발생합니다.CALayer에 대한 델리게이트를 설정하려면 어떻게해야합니까?
Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
다음은 오류를 생성하는 코드입니다. 엑스 코드 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 {
}
'CALayer'의'delegate' 속성은'weak'입니다. 그래서 새로운 객체를 설정하면 바로 할당 해제됩니다. 그게 당신의 예외의 근원인지 모르겠지만 ... – Robert
이 답변에 따르면 : http://stackoverflow.com/a/19652248/1179863 EXC_I386_GPFLT는 분명히 "일반 보호 오류"를 말하는 것이고, 이것은 x86의 방법입니다. "너는 네가 할 수없는 일을 했어"라고 말해. 일반적으로 메모리 경계 밖으로 액세스한다는 의미는 아니지만 코드가 범위를 벗어나서 잘못된 코드/데이터가 특정 유형의 보호 위반을 초래하는 방식으로 사용되는 것일 수 있습니다. –
당신은 클래스 ViewController를 시도 했습니까? UIViewController {let layerDelegate = LayerDelegate()는 func viewDidLoad() {... myLayer.delegate = layerDelegate}}'를 재정의합니까? – Yannick