ios - 初始化节点时找不到值
问题描述
我是一个初学者程序员。请帮忙。展开 childNode 时找不到值。不知道为什么。请帮忙,谢谢我的代码:
var someParentNode = SKSpriteNode()
var someChildNode = SKSpriteNode()
override func didMove(to view: SKView) {
someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNode
someChildNode = self.childNode(withName: "someChildNode") as! SKSpriteNode
问题:在展开 childNode 时出现错误(在最后一行):
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
不知道为什么它是一个错误。就像节点名称所暗示的那样,childNode 是 someParentNode 的父节点。请帮忙。提前致谢 :)
解决方案
该代码someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNodeself.childNode(withName: "someParentNode")
查找名称为“someParentNode”的 SKNode。请记住,这是您可以分配给节点的名称,如someNode.name = "xyz"
. 它不引用行中的变量名称var someParentNode = SKSpriteNode()
。这是两个不同的东西。
由于没有节点 where node.name == "someParentNode"
,函数self.childNode(withName: "someParentNode")
返回nil
。然后你用 强制解包as!
,导致错误。
您不需要调用someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNode
in didMove
,因为您已经在第一行创建了一个新的SKNode
并分配了这个新SKNode
的。someParentNode
因此不再需要为其分配新节点。
如果您仍想按名称查找节点,请someParentNode.name = "someParentNode"
在调用之前执行此操作self.childNode(withName: "someParentNode")
,但这不是必需的,因为如上所述,您已经创建并分配了一个SKNode
新到someParentNode
. 此外,由于您someParentNode
在任何函数之外声明,它在您的 SKScene 中具有全局范围,因此您可以在该场景的任何方法中访问它。因此,无需使用方法来查找节点,因为您始终可以访问场景中的该节点。
希望这可以帮助!同样的道理适用于someChildNode
推荐阅读
- mysql - node.js MySQL 连接未建立 - 仅在使用 XAMPP 时
- sql - 在 SSMS 2014 结果中添加双引号(需要来自原始帖子的响应)
- angularjs - angularjs - 在没有路由/ng-view 的情况下实现路由的解析功能
- excel - 在 Outlook 中的子内调用子 - 范围类的自动筛选方法失败
- macos - 为什么 docker 会消耗这么多 VIRT 内存?
- java - Spring RestTemplate - 错误处理
- c# - 将 Excel 数据行传输到数组的另一种看法(已编辑)
- oracle - 4 个节点的 oracle 集群每个用户的会话总数
- javascript - 基于路径合并 JavaScript 对象的最短方法
- c# - 如何正确停靠多个元素,WPF