AVAudioPlayer возвращает ноль после того, как игра некоторое время работала

В настоящее время я разрабатываю небольшую игру, в которой воздушные шары всплывают из нижней части экрана, и игрок должен их лопнуть, прежде чем они достигнут вершины.

Каждый объект воздушного шара содержит метод для безопасной настройки AVAudioPlayer:

func setUpAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer? {

    let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
    let url = NSURL.fileURLWithPath(path!)

    var audioPlayer:AVAudioPlayer?

    do {
        try audioPlayer = AVAudioPlayer(contentsOfURL: url)
    }catch {
        print("BALLOON ERROR - AudioPlayer not avaliable.")
    }

    return audioPlayer
}

Затем в каждом методе init() воздушных шаров я запускаю следующий код:

if let popSound = self.setUpAudioPlayerWithFile("PopSound", type: "wav") {
        self.popSound = popSound
    }

Который работает абсолютно нормально до пары минут в игре. В этот момент я начинаю получать сообщение «BALLOON ERROR — AudioPlayer недоступен». в консоли для каждого создаваемого воздушного шара, указывающего, что мой ресурс не найден?

В это время мои SKEmitterNodes также начинают возвращать ноль. (2016-08-13 18:59:54.527 Stop & Pop[256:13785] *** -[NSKeyedUnarchiver initForReadingWithData:]: данные равны NULL)

Есть ли что-то очевидное, что я упускаю из виду, что может быть причиной этих ошибок?

Я надеюсь, что предоставил достаточно информации, спасибо за чтение.


person M. Stolte    schedule 13.08.2016    source источник


Ответы (1)


Нет... это не сработает. Вы должны создать экземпляр переменной audioPlayer на уровне класса.

Я попытался сделать это, создал экземпляр var audioPlayer на другом ViewController на уровне класса.

Лучше всего локализовать этот метод в вашем ViewController и поместить здесь audioPlayer:

class YourClassName : Type {
var audioPlayer : AVAudioPlayer?

yourMethodForCalling() {

}
person C.B.Pongasi    schedule 26.03.2019