当我在iPad上测试我的应用程序时,我可以始终如一地可靠地让它崩溃。当它发生时,我在main中得到一个EXC_BAD_ACCESS错误,根本原因远非明显。我已经尝试了以下步骤来尝试更多地了解它:
这是特别奇怪的。当我在iPad上测试时,应用程序会一直崩溃。当我在模拟器中测试时,无论我做什么,它都不会崩溃。因此,如果它是一个僵尸,我不知道如何发现哪个对象需要更好地保留。此外,如果我在iPhone上测试,该应用程序也不会崩溃。
发生崩溃的地方:在应用程序中,我有一些显示信息的精灵节点,当我触摸其中一个时(实际上,我触摸的是一个看起来像取消按钮的子精灵),什么应该发生的是我从其父级删除取消按钮的父级:
[[self parent] removeFromParent];
调用堆栈的图片:
主xcode窗口中的控制台中没有任何内容,但这是在设备的控制台中(来自组织者窗口:
Apr 10 08:50:39 Roberts-iPad com.apple.debugserver-310.2[596] <Warning>: 69 +0.000164 sec [0254/060b]: far -> 788
Apr 10 08:50:39 Roberts-iPad com.apple.debugserver-310.2[596] <Warning>: 70 +0.000079 sec [0254/060b]: esr -> 796
Apr 10 08:50:39 Roberts-iPad com.apple.debugserver-310.2[596] <Warning>: 71 +0.000081 sec [0254/060b]: exception -> 800
Apr 10 08:50:42 Roberts-iPad backboardd[31] <Error>: HID: The 'Passive' connection 'Bubble Fit' access to protected services is denied.
Apr 10 08:50:43 Roberts-iPad backboardd[31] <Warning>: CoreAnimation: updates deferred for too long
Apr 10 08:50:57 Roberts-iPad lockdownd[25] <Notice>: 01cdc000 _select_socket: receive secure message timeout!
Apr 10 08:50:57 Roberts-iPad lockdownd[25] <Notice>: 01cdc000 _receive_message: walk away - non-SSL 1
直到昨天我才认为我非常非常接近发货:P我会很感激如何更好地了解这个例外的根本原因是什么。谢谢!
更新:正如LearnCocos2D在下面指出的那样,我很可能会链接到相同的SpriteKit错误。建议是覆盖removeFromParent。我试过这个,但它产生了一个错误:
- (void)removeFromParent
{
[self removeFromParent];
self = nil;
[super removeFromParent];
}
它产生的错误是self不能分配给init之外。我该怎么改写呢?
答案 0 :(得分:0)
事实证明,这确实是SpriteKit中的一个错误,在此进一步讨论:
Sprite Kit iOS 7.1 crash on removeFromParent
我的修复是重写removeFromParent,在SKShapeNode子类中包含在移除父级之前需要被删除的子项,因为:
- (void)removeFromParent
{
[self.addButton removeFromParent];
[self.cancelButton removeFromParent];
self.addButton = nil;
self.cancelButton = nil;
[super removeFromParent];
}
子形状节点是父节点的属性。