如何捕获 SCNReferenceNode.referenceURL 属性 (SceneKit) 上的错误?
How to catch an error on SCNReferenceNode.referenceURL property (SceneKit)?
问题是,如果我创建 SCNReferenceNode
并尝试获取 referenceURL
...
let refNode: SCNReferenceNode = SCNReferenceNode()
let curUrl = refNode.referenceURL
...
为了检查是否是nil
,我得到了一个异常
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x186d06dd0)
看起来没有办法解决这个问题。
P.S. 我知道有一个选项可以给 URL 这样的构造函数,比如 SCNReferenceNode(myURL)
,但我必须使用我在 refURL
之前创建 SCNReferenceNode
的方法可用。
似乎引用 URL 属性 应该在 Objective-C 实现中标记为可为空,这将使 属性 成为可选的,但事实并非如此不是这样的。如您所见,任何通过 referenceURL
属性 访问它的尝试都会导致崩溃。
但是,由于节点是 NSObject
,您可以使用 key-value 编码,并为其添加扩展名,如下所示:
extension SCNReferenceNode {
var optionalReferenceURL: URL? {
value(forKey: "referenceURL") as? URL
}
}
这将使您可以安全地访问参考文献 URL 属性。同时,您还应该将此作为错误提交给 SceneKit 团队。
问题是,如果我创建 SCNReferenceNode
并尝试获取 referenceURL
...
let refNode: SCNReferenceNode = SCNReferenceNode()
let curUrl = refNode.referenceURL
...
为了检查是否是nil
,我得到了一个异常
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x186d06dd0)
看起来没有办法解决这个问题。
P.S. 我知道有一个选项可以给 URL 这样的构造函数,比如 SCNReferenceNode(myURL)
,但我必须使用我在 refURL
之前创建 SCNReferenceNode
的方法可用。
似乎引用 URL 属性 应该在 Objective-C 实现中标记为可为空,这将使 属性 成为可选的,但事实并非如此不是这样的。如您所见,任何通过 referenceURL
属性 访问它的尝试都会导致崩溃。
但是,由于节点是 NSObject
,您可以使用 key-value 编码,并为其添加扩展名,如下所示:
extension SCNReferenceNode {
var optionalReferenceURL: URL? {
value(forKey: "referenceURL") as? URL
}
}
这将使您可以安全地访问参考文献 URL 属性。同时,您还应该将此作为错误提交给 SceneKit 团队。