我正在尝试快速创建CAShapeLayer的副本,但是崩溃了>>
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[CAShapeLayer copyWithZone:]:无法识别的选择器已发送到实例0x282e87e60'
我应该采取哪些额外的步骤来允许CALayer .copy()在不导致应用程序崩溃的情况下工作?即使我不转换.copy()的结果,它仍然在该copy()行中完全失败...
private var drawLines: [CAShapeLayer] func getCopiedLayers() -> [CAShapeLayer] { return drawLines.compactMap { layer -> CAShapeLayer? in return layer.copy() as? CAShapeLayer } }
我在这里做错了什么?预先感谢您的回答
我正在尝试快速创建CAShapeLayer的副本,但由于未捕获的异常'NSInvalidArgumentException'而导致崩溃的终止应用程序,原因:'-[CAShapeLayer copyWithZone:]:...
CALayer
不符合API中的NSCopying
,但符合NSSecureCoding
,因此可以如下添加复制功能NSCoding
存档/未存档?private var drawLines: [CAShapeLayer] = []
func getCopiedLayers() -> [CAShapeLayer] {
return drawLines.compactMap { layer -> CAShapeLayer? in
return try? NSKeyedUnarchiver.unarchivedObject(ofClass: CAShapeLayer.self, from: NSKeyedArchiver.archivedData(withRootObject: layer, requiringSecureCoding: false))
}
}