iOS 7 SpriteKit 游戏 - 保存加载游戏时出错:'尝试将 nil 节点添加到父节点:<SKNode> 名称:'(null)'

Posted

技术标签:

【中文标题】iOS 7 SpriteKit 游戏 - 保存加载游戏时出错:\'尝试将 nil 节点添加到父节点:<SKNode> 名称:\'(null)\'【英文标题】:iOS 7 SpriteKit Game - error saving loading game: 'Attempted to add nil node to parent: <SKNode> name:'(null)'iOS 7 SpriteKit 游戏 - 保存加载游戏时出错:'尝试将 nil 节点添加到父节点:<SKNode> 名称:'(null)' 【发布时间】:2014-01-11 07:27:32 【问题描述】:

我正在创建一个解读文字游戏。

我已经到了可以使用以下方式保存/加载游戏的阶段:

(void)encodeWithCoder:(NSCoder *)aCoder

(instancetype)initWithCoder:(NSCoder *)aDecoder

当我第一次保存/加载游戏时没有问题。当我第二次按下主页按钮时,应用程序崩溃了,我最终遇到了一个我不知道如何理解的错误。

这是什么意思?

2014-01-11 18:23:12.254 GameTest[16622:70b] 由于未捕获的异常而终止应用程序

'Attemped to add nil node', reason: 'Attemped to add nil node to parent: &lt;SKNode&gt; name:'(null)' position:0, 0 accumulatedFrame:inf, inf, inf, inf'

我不知道我的代码哪里出错了。

卢克干杯

【问题讨论】:

这意味着 addChild 被调用,参数为 nil。添加 xcode 异常断点,如果错误在您的代码中,它会显示给您 【参考方案1】:

感谢LearnCocos2D,

这个错误的细节很神秘(我的观点)。

问题在于我如何处理“bodyWithEdgeLoop”边界。

问题也与:

(void)encodeWithCoder:(NSCoder *)aCoder

(instancetype)initWithCoder:(NSCoder *)aDecoder

方法。

我正在使用 Ray Wenderlich 的 ios Games by Tutorials 书,我在“initWithCoder”方法中犯了一个错误。

我在“encodeWithCoder”方法中删除并替换了边缘循环体,但没有在“initWithCoder”方法中创建它。

这就是解决方案。保存游戏时,必须在“encodeWithCoder”方法中删除和替换边缘主体循环,但也必须在“initWithCoder”方法中创建。

最大的问题是 Xcode 没有指向我代码中的任何行。我只是凭着“预感”这样做的。

希望对你有帮助。

【讨论】:

【参考方案2】:

我遇到了类似的问题,似乎会​​影响某些类型的 iPad。场景试图添加 nil child。

添加异常处理块似乎已修复它,即使我从未见过异常打印语句。

    @try 
        [self addChild:node];
    
    @catch (NSException *exception) 
        NSLog(@"Exception adding node :%@",[exception description]);
    
    @finally 

    

【讨论】:

以上是关于iOS 7 SpriteKit 游戏 - 保存加载游戏时出错:'尝试将 nil 节点添加到父节点:<SKNode> 名称:'(null)'的主要内容,如果未能解决你的问题,请参考以下文章

使用 SpriteKit 和 iOS 7 保存高分

回合制游戏的 iOS SpriteKit 物理原理?

iOS Spritekit 游戏中的肌酐水平

iOS7 Sprite Kit 我可以存档整个场景并将其用作保存游戏吗?

iOS8 Spritekit 滞后

SpriteKit iOS 7 Sknode 没有被删除