2013-11-26 11 views
9

ठीक है दोस्तों, मैं एक ऐप विकसित कर रहा हूं जिसमें मेरे पास एक एसकेएक्शन ऑब्जेक्ट वाला एनएसएमयूटेबल डिक्शनरी है। एसकेएक्शन ध्वनि चलाने के लिए है।पृष्ठभूमि में प्रवेश करते समय स्प्राइटकिट क्रैश

यह सब अच्छी तरह से काम करता है, को छोड़कर ... निम्नलिखित स्टैक ट्रेस के साथ पृष्ठभूमि में प्रवेश पर ऐप्लिकेशन क्रैश:

* thread #1: tid = 0x187d7, 0x3461b932 libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient + 10, queue = 'com.apple.spritekit.renderQueue, stop reason = EXC_BAD_ACCESS (code=1, address=0x1) 
frame #0: 0x3461b932 libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient + 10 
frame #1: 0x3461c3d0 libGPUSupportMercury.dylib`gpusSubmitDataBuffers + 104 
frame #2: 0x2eafc4a4 IMGSGX554GLDriver`SubmitPackets + 124 
frame #3: 0x31f83cb0 GLEngine`gliPresentViewES + 168 
frame #4: 0x31f8e136 OpenGLES`-[EAGLContext presentRenderbuffer:] + 62 
frame #5: 0x002622e6 libglInterpose.dylib`EAGLContext_presentRenderbuffer(EAGLContext*, objc_selector*, unsigned int) + 370 
frame #6: 0x323f9064 SpriteKit`-[SKView _renderContent] + 1220 
frame #7: 0x3a90b0ae libdispatch.dylib`_dispatch_client_callout + 22 
frame #8: 0x3a90f8f2 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 26 
frame #9: 0x323f8b72 SpriteKit`-[SKView renderContent] + 82 
frame #10: 0x323f651a SpriteKit`__29-[SKView setUpRenderCallback]_block_invoke + 130 
frame #11: 0x32418c86 SpriteKit`-[SKDisplayLink _callbackForNextFrame:] + 254 
frame #12: 0x002615fe libglInterpose.dylib`-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 270 
frame #13: 0x321d7ad2 QuartzCore`CA::Display::DisplayLinkItem::dispatch() + 98 
frame #14: 0x321d787c QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 344 
frame #15: 0x34dd476c IOMobileFramebuffer`IOMobileFramebufferVsyncNotifyFunc + 104 
frame #16: 0x30a5ebe4 IOKit`IODispatchCalloutFromCFMessage + 248 
frame #17: 0x2fd3cb80 CoreFoundation`__CFMachPortPerform + 136 
frame #18: 0x2fd47776 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34 
frame #19: 0x2fd47712 CoreFoundation`__CFRunLoopDoSource1 + 346 
frame #20: 0x2fd45ede CoreFoundation`__CFRunLoopRun + 1406 
frame #21: 0x2fcb0470 CoreFoundation`CFRunLoopRunSpecific + 524 
frame #22: 0x2fcb0252 CoreFoundation`CFRunLoopRunInMode + 106 
frame #23: 0x349b72ea GraphicsServices`GSEventRunModal + 138 
frame #24: 0x32565844 UIKit`UIApplicationMain + 1136 
frame #25: 0x000bd1bc SpritekitCrash`main(argc=1, argv=0x27d4dc5c) + 116 at main.m:16 

के बाद से यह कहा EXC_BAD_ACCESS, मैं संदिग्ध ज़ोंबी-वस्तुओं, लेकिन उन्हें इस योजना didn में सक्षम करने के लिए इस दुर्घटना को समझने में कुछ मदद नहीं करें।

self.arrSounds = [[NSMutableDictionary alloc] init]; 
[self.arrSounds setObject:[SKAction playSoundFileNamed:[NSString stringWithFormat:@"70.caf"] waitForCompletion:NO] forKey:[NSString stringWithFormat:@"1"]]; 

यह संभव कैसे है:

यह भी MyScene.m में (शाब्दिक 2 कोड की लाइनें) सबसे minimalistic परियोजना सेटअप में क्या होता है?

तुम मेरे GitHub पेज से इस परियोजना डाउनलोड कर सकते हैं: https://github.com/SabatinoMasala/SpritekitCrash

+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/18976813/sprite-kit-playing-sound -लेड्स-टू-एप-टर्मिनेशन) – LearnCocos2D

उत्तर

12

Allright, मैं इस मुद्दे पाया।

परदे के पीछे, SpriteKit के लिए AVAudioSession (जो समझ में आता है) का उपयोग करता है [SKAction playSoundFileNamed:]

AVAudioSession सक्रिय है, जबकि आवेदन पृष्ठभूमि में है नहीं किया जा सकता है, तो हम इसे रोकने के लिए जब करने के लिए जा रहा है पृष्ठभूमि, और अग्रभूमि में प्रवेश करते समय इसे पुनः सक्रिय करें। दोनों applicationWillResignActive और applicationDidEnterBackground में कोड के इस टुकड़े AVAudioSession निष्क्रिय करने के लिए

उपयोग: यह पर्याप्त नहीं है, जबकि setActive

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
+0

मेरे पास बिना किसी आवाज के एक ही समस्या है। मैं पृष्ठभूमि पर एसकेसीसीन दृश्य को रोक रहा हूं। – igraczech

1

:

[[AVAudioSession sharedInstance] setActive:NO error:nil]; 

इसे फिर से सक्षम करने के लिए, applicationWillEnterForeground में इस का उपयोग करें: त्रुटि के साथ अक्सर समाप्त नहीं होता है (प्रभाव में कोई निष्क्रियता नहीं) जो अभी भी दुर्घटना की ओर जाता है।

पूर्ण समाधान मैं यहाँ का वर्णन किया है: Sprite Kit & playing sound leads to app termination

की [स्प्राइट किट और खेलने ध्वनि एप्लिकेशन समाप्ति की ओर जाता है]
संबंधित मुद्दे

 संबंधित मुद्दे