سؤال

ولدي التطبيق فون بسيط مع عدة أصوات يلعب بالفعل. ومع ذلك، ليست واحدة في سوف خاص. كتلة التعليمات البرمجية لقد اخترق يصل هو:

NSString *soundPath2 = [[NSBundle mainBundle] pathForResource:@"gameover" ofType:@"wav"];
NSURL *soundFileURL2 = [NSURL fileURLWithPath:soundPath2];
NSError *err;
AVAudioPlayer *sound2 = [[[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL2 error:&err] autorelease];
NSLog(@"Error: %@", [err description]);
NSLog(@"Duration: %f ", [sound2 duration]);
BOOL b = [sound2 play];
NSLog(@"Play Bool: %d", b);

وحدة التحكم يظهر الخطأ هو باطل، ومنطقية بإرجاع صحيح، وحتى فترة غير الصحيح! ومع ذلك، واللعب لا يفعل شيئا. إذا قمت بتغيير "GAMEOVER" لصوت آخر (صوت تنبيه بسيط)، كل شيء على ما يرام.

وبينما سيكون كبيرا للحصول عليه لعب، وأنا أعاني أيضا أن نفهم ما هي الشروط الخطأ، وما إلى ذلك يمكن أن تحقق ل1) تعرف أنها فشلت و 2) لماذا.

والصوت هو مسألة متاح في http://wdr1.com/gameover.wav .

هل كانت مفيدة؟

المحلول

والمشكلة هي أنه لا ينبغي عليك أن autoreleasing وAVAudioPlayer. طريقة اللعب يحدث بشكل غير متزامن وإذا كان لاعب يحصل على autoreleased ثم لا شيء على عقد لذلك وأنه سوف يموت فقط.

ويجب إطلاق سراح لاعب الصوت الخاص بك بمجرد الانتهاء من لاعب يلعب في المفوض:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top