2014-10-01 5 views
0

iOS8로 업그레이드 한 후 SpriteKit 게임이 EXC_BAD_ACCESS와 충돌합니다. 무작위로 약간의 연주를 한 후에도 아무런 이유없이 발생합니다. Exception breakpoint 및 NSZombie 감지에 대한 정보가 없으므로 오류를 일으키는 코드의 행을 감지 할 수 없습니다. 시뮬레이터와 장치에서 모두 확인하십시오.SpriteKit : EXC_BAD_ACCESS SpriteKit`SKCShapeSprite :: getAccumulatedBounds() 충돌

역 추적은 :

* thread #1: tid = 0x13fa2, 0x2b3977f0 SpriteKit`SKCShapeSprite::getAccumulatedBounds() const + 84, queue = 'com.apple.spritekit.renderQueue', stop reason = EXC_BAD_ACCESS (code=1, address=0x11) 
frame #0: 0x2b3977f0 SpriteKit`SKCShapeSprite::getAccumulatedBounds() const + 84 
frame #1: 0x2b3e3086 SpriteKit`SKCRenderer::preprocessSpriteImp(std::__1::vector<SKCRenderer::SpriteRenderInfo, std::__1::allocator<SKCRenderer::SpriteRenderInfo> >&, SKRenderQuadPool&, SKCSprite const*, _GLKMatrix4 const&, float, unsigned int&, bool) + 1030 
frame #2: 0x2b3e39b4 SpriteKit`SKCRenderer::preprocessSpriteImp(std::__1::vector<SKCRenderer::SpriteRenderInfo, std::__1::allocator<SKCRenderer::SpriteRenderInfo> >&, SKRenderQuadPool&, SKCSprite const*, _GLKMatrix4 const&, float, unsigned int&, bool) + 3380 
frame #3: 0x2b3ddbe2 SpriteKit`SKCRenderer::preprocessAndSubmitSpriteInternal(std::__1::vector<SKCRenderer::SpriteRenderInfo const*, std::__1::allocator<SKCRenderer::SpriteRenderInfo const*> >&, std::__1::vector<SKCRenderer::SpriteRenderInfo, std::__1::allocator<SKCRenderer::SpriteRenderInfo> >&, SKRenderQuadPool&, SKCSprite const*, _GLKMatrix4 const&) + 94 
frame #4: 0x2b3e29be SpriteKit`SKCRenderer::preprocessAndSubmitSprite(SKCSprite const*, _GLKMatrix4 const&) + 154 
frame #5: 0x2b3e0b32 SpriteKit`SKCRenderer::submitScene(SKScene*, bool) + 530 
frame #6: 0x2b3e4b98 SpriteKit`SKCRenderer::renderScene(SKScene*, bool) + 152 
frame #7: 0x2b37bf4a SpriteKit`-[SKView _renderContent] + 1098 
frame #8: 0x00683abe libdispatch.dylib`_dispatch_client_callout + 22 
frame #9: 0x0068b270 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 96 
frame #10: 0x2b37bad2 SpriteKit`-[SKView renderContent] + 82 
frame #11: 0x2b37885c SpriteKit`__29-[SKView setUpRenderCallback]_block_invoke + 116 
frame #12: 0x2b3a9fcc SpriteKit`-[SKDisplayLink _callbackForNextFrame:] + 248 
frame #13: 0x005e61b6 libglInterpose.dylib`-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 270 
frame #14: 0x2af4ed7a QuartzCore`CA::Display::DisplayLinkItem::dispatch() + 98 
frame #15: 0x2af4ebe2 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 366 
frame #16: 0x2f7fe82e IOMobileFramebuffer`IOMobileFramebufferVsyncNotifyFunc + 90 
frame #17: 0x28f7e51c IOKit`IODispatchCalloutFromCFMessage + 256 
frame #18: 0x28010be4 CoreFoundation`__CFMachPortPerform + 132 
frame #19: 0x28021022 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34 
frame #20: 0x28020fbe CoreFoundation`__CFRunLoopDoSource1 + 346 
frame #21: 0x2801f5e0 CoreFoundation`__CFRunLoopRun + 1608 
frame #22: 0x27f6cdb0 CoreFoundation`CFRunLoopRunSpecific + 476 
frame #23: 0x27f6cbc2 CoreFoundation`CFRunLoopRunInMode + 106 
frame #24: 0x2f2f8050 GraphicsServices`GSEventRunModal + 136 
frame #25: 0x2b538a30 UIKit`UIApplicationMain + 1440 
* frame #26: 0x000b4f2c p01g01`main(argc=1, argv=0x00418a84) + 116 at main.m:16 

이 오류는 내가 SpriteKit'SKCSprite::update(double) 발생 removeFromParent 문제를 해결 한 후에 만 ​​나타났다. 참조를 위해 여기로 오십시오 : EXC_BAD_ACCESS after upgrading to iOS8 SpriteKit game

모든 의견을 환영합니다!

답변

0

name 속성의 고유 한 이름을 설정하여이 기능을 사용해보십시오. 어떻게 든 나를 위해 일했다.

static NSInteger count = 0; 

@interface Power() 

- (instancetype)init 
{ 
    if (self = [super init]) { 
     count++; 
     self.name = @(count).stringValue; 
    } return self 
} 

@end 

개체가 두 번 이상 할당 취소되었음을 알 수 있습니다. 어쩌면 한 객체를 다른 객체와 구별 할 수 없었기 때문일 수도 있습니다.