2013-06-17 5 views
2

Это уже давно заглохнуло меня. Я использую Xcode 4.6, но это происходит для нескольких версий. Когда я включаю точки останова и добавляю Exception Breakpoint, он всегда останавливается на строке кода, где я настраиваю аудиоплеер. Я задавал некоторые вопросы до и после того же, но это только останавливается на этом.Xcode Exception Breakpoint всегда останавливается на свойстве

Вот код, я использую:

[[AVAudioSession sharedInstance] setDelegate: self]; 
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil]; 

    NSError *activationError = nil; 
    [[AVAudioSession sharedInstance] setActive: YES error: &activationError]; 

    self.playedSongs = [NSMutableSet setWithCapacity:9]; 
    [self loadSettingsFromFile]; 
    NSURL *sfxPath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Snap.aiff" ofType:nil]]; 
    self.snapSfx = [[[AVAudioPlayer alloc]initWithContentsOfURL:sfxPath error:nil]autorelease]; 
    self.snapSfx.volume = 1.f; 

    NSURL *fireworksPath; 
    if ([OriginalIPadChecker isNotiPadOriginal]) { 
     fireworksPath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"FireworksSFX.mp3" ofType:nil]]; 
    } 
    else{ 
     fireworksPath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"NoFireworksSFX.mp3" ofType:nil]]; 
    } 
    self.fireWorksSfx = [[[AVAudioPlayer alloc]initWithContentsOfURL:fireworksPath error:nil]autorelease]; 
    self.fireWorksSfx.volume = 1.f; 

    NSURL *poofPath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Remove Poof.mp3" ofType:nil]]; 

    //The line below is the one that it pauses on 
    self.removePoof = [[[AVAudioPlayer alloc]initWithContentsOfURL:poofPath error:nil]autorelease]; 
    self.removePoof.volume = 1.f; 

    NSURL *newHighScorePath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"New High Score.mp3" ofType:nil]]; 
    self.theNewHighScore = [[[AVAudioPlayer alloc]initWithContentsOfURL:newHighScorePath error:nil]autorelease]; 
    self.theNewHighScore.volume = 1.f; 

    NSURL *badgeInTrophyPath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Badge In Trophy.aiff" ofType:nil]]; 
    self.badgeInTrophy = [[[AVAudioPlayer alloc]initWithContentsOfURL:badgeInTrophyPath error:nil]autorelease]; 
    self.badgeInTrophy.volume = 1.f; 

    NSURL *dingPath = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Ding.aif" ofType:nil]]; 
    self.ding = [[[AVAudioPlayer alloc]initWithContentsOfURL:dingPath error:nil]autorelease]; 
    self.ding.volume = 1.f; 

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

Я не понимаю, почему он делает паузу. Есть идеи?

+0

Вы в XCode v4.6.2? –

+0

@MarcusAdams 4.6.1, но, как я уже сказал, это происходит для многих версий, и я думаю, что это больше, чем просто ошибка в xcode. – daveMac

ответ

2

Попробуйте обновить и вопрос о том, где он останавливается (если он останавливается):

AVAudioPlayer *foo; 
NSError *error = nil; 
assert(poofPath); 

foo = [AVAudioPlayer alloc]; 
foo = [foo initWithContentsOfURL:poofPath error:&error]; 
assert(foo); 
[self setRemovePoof:foo]; 
[foo release]; 

Если утверждают, умирает, это, вероятно, проблема компании Apple. К сожалению, есть случаи внутренних фреймворков Apple, использующих try/catch, и они будут вызывать точку останова. Это не часто, но все же происходит.

Если в конце концов, что foo не равен нулю, а ошибка также равна нулю, лучше всего ввести отчет об ошибке на bugreporter.apple.com (что было бы замечательно). Кроме того, вы посмотрели на poofPath - есть ли вероятность, что URL-адрес вернет что-то, кроме чистого звука?

Я предполагаю, что Apple пытается открыть и обработать файл, его получает внутреннее исключение, потому что в нем есть что-то «странное» или ненормальное. Затем структура выполняет дополнительную работу и умеет читать файл. Таким образом, вы получаете свой звук, но это тоже исключение. Возьмите некоторый общий тип mp3 и поместите это в свой комплект приложений и попытайтесь открыть его. Посмотрите, дает ли это (и, возможно, несколько других файлов) ту же ошибку. Или создайте демонстрационный проект со звуком и загрузите его (в конце вам может потребоваться отправить демонстрационный проект Apple в отчет об ошибке). Об этом необходимо сообщать об ошибках.

EDIT: К сожалению, есть случаи внутренних фреймворков Apple, использующих try/catch, и они будут вызывать точку останова. Затем, как упоминалось ранее, какой-то более поздний код, наконец, определяет, как декодировать файл и делает.

Оригинальный плакат ответил в комментарии, что этот файл был создан с Audacity, и слышал, что такие файлы часто имеют проблемы с декодированием.

+0

Он остановился на "foo = [foo initWithContentsOfURL: ошибка poofPath: & error];" Кроме того, ошибок нет. – daveMac

+2

К сожалению, есть случаи внутренних фреймворков Apple, использующих try/catch, и они будут вызывать точку останова. Это не часто, но все же происходит. Я предполагаю, что в конце концов, что foo не ноль, а ошибка также равна нулю. На этом этапе лучше всего вы можете ввести отчет об ошибке на bugreporter.apple.com (что было бы замечательно). Кроме того, вы посмотрели на poofPath - есть ли вероятность, что URL-адрес вернет что-то, кроме чистого звука? –

+0

Он определенно возвращает MP3, но что касается «первозданного», я не уверен, что вы подразумеваете под этим. Как я могу это проверить? – daveMac

3

Как поясняется в комментарии Xcode stops on prepareToPlay, причиной точки останова является то, что вы устанавливаете общую точку останова типа «исключение на все», которая отвечает на сигнал, который запускается библиотекой C++. Лучше использовать контрольную точку исключения Objective-c, которая будет защищать для таких случаев.