سؤال

أقوم بعمل تطبيق لمرحلة ما قبل المدرسة مع العديد من الألعاب الصغيرة. واحد منهم ينطوي على العثور على "ما هو الخطأ" في الصورة. على سبيل المثال ، إذا ضغطوا على الطفل الذي يلعب في الشارع ، وأصوات الطلاء ، يتم نقل الطفل خارج الشارع ، ويتم تحديث التسمية إلى "1/5 أخطاء موجودة". إذا وجدواهم جميعًا ، فإنهم ينتقلون إلى ViewController جديد مع أخطاء حركة مرور جديدة.

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

الوظيفة التي تسمى عند العثور على خطأ هي:

-(void)fantKnapp{

    NSLog(@"fant en knapp");
    int ant =[self.antall intValue];
    ant++;
    NSLog(@"antall %i",ant);
    self.antall=[NSNumber numberWithInt:ant];
    self.poeng.text=[NSString stringWithFormat: @"%i/5 funnet",ant];

    if(ant==5){
        NSLog(@"Du klarte alle!");
        klartAlleView.hidden=NO;
        spillIgjen.hidden=NO;
        nestebrettKnapp.hidden=NO;
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"du_klarte_alle"];
    }
    else{
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"cling_1"];
    }
}

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

-(void)spillLyd:(NSString*) filnavn{
    NSString *audioFilePath=[[NSBundle mainBundle] pathForResource:filnavn ofType:@"aif"];
    NSURL *audioFileURL=[NSURL fileURLWithPath:audioFilePath];
    self.lydspiller=[[[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil] autorelease];
    [self.lydspiller prepareToPlay];
    [self.lydspiller play];
    NSLog(@"spiller lyden");
}

هذا يعمل بشكل جيد في 49/50 حالة ، ولكن كل مرة لا. الشيء المضحك هو أن الصوت يتم تشغيله ، لكن التطبيق يتجمد ، ولم يتم تحديث التسمية (self.poeng.text = ...). ولكن يتم عرض جميع تعليقات NSLog ، بما في ذلك العدد الجديد من النقاط. أتوقع أن يحدث هذا قبل تشغيل الصوت ...

هل هذه مشكلة مع Avaudioplayer؟ هل لدى أي شخص تجارب مماثلة؟ هل يمكن لأي شخص مساعدتي في هذا؟ أنا ممتن لأي مساعدة أو اقتراحات ...

(وآسف على النرويجيين. ربما لا يسهل مساعدتي ...)

لا يوجد حل صحيح

نصائح أخرى

ربما تحتاج إلى تنفيذ AVAudioPlayerDelegate الأساليب حتى تتمكن من محاولة فخ الأخطاء من اللاعب. إذا أبلغ المندوب أن اللاعب أنهى بنجاح على الرغم من أن التطبيق يتجمد ، فمن المرجح أن يكون الخطأ مرتبطًا بالاعب.

انا اشعر بك. القليل من مهمة تصحيح الأخطاء أكثر إحباطًا من تعقب خطأ محدد ولكنه متقطع للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top