это приложение было разработано и отлично работает под ios 5.0, но сбой в ios 4.3

Я разработал приложение для iPhone под iOS 5.0, и он отлично работает. Но когда дело доходит до iOS 4.3 (базовый SDK = последний iOS 5.0, компилятор = Apple LLVM 3.0, Deployment Target = iOS 4.3), он вылетает после запуска.

Вывод вокруг точки сбоя выглядит так:

2011-12-06 16:25:08.177 FMWei[466:c203] -[AVAudioSession setMode:error:]: unrecognized selector sent to instance 0x706a7f0 2011-12-06 16:25:08.181 FMWei[466:c203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVAudioSession setMode:error:]: unrecognized selector sent to instance 0x706a7f0' 

Похоже, что у AVAudioSession нет функции-члена setMode:error: while я ее вызывал. Но странно, что я не вызывал функцию с именем setMode:error: Код об обработке звука:

 audio_session = [[AVAudioSession sharedInstance] retain]; audio_session_err = nil; [audio_session setCategory: AVAudioSessionCategoryPlayAndRecord error:&audio_session_err]; NSLog(@"!"); UInt32 audioRouteOverride = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,sizeof (audioRouteOverride),&audioRouteOverride); UInt32 allowMixing = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); if (audio_session_err) { NSLog(@"audioSession: %@ %d %@", [audio_session_err domain], [audio_session_err code], [audio_session_err description]); } else { audio_session_err = nil; [audio_session setActive:YES error:&audio_session_err]; if (!audio_session_err) NSLog(@"audio session is activated successfully"); } 

Пожалуйста, помогите мне выяснить, почему он падает под iOS 4.3 со странной ошибкой. Спасибо!

3 Solutions collect form web for “это приложение было разработано и отлично работает под ios 5.0, но сбой в ios 4.3”

Во время выполнения вызывается множество методов, которые не входят в ваш код, но которые вызываются за кулисами в результате вызовов API, которые вы сделали.

Я бы сосредоточился не на вызываемом методе, а на том, почему отправленный объект не может ответить на селектор. Объект мог быть отличен как неправильный тип и поэтому не наследует правильные методы. (В фрагменте кода, который вы показываете, вы явно не используете AVAudioSession *audio_session .) Другое направление – проверить, что вы не используете какой-либо другой вызов API, который является только iOS 5, который в фоновом режиме вызывает этот метод и таким образом генерируя ошибку.

Наконец, если вы недавно изменили цель сборки, включив iOS 4.3, вам просто нужно сделать чистую сборку (Product> Clean), чтобы она компилировала iOS 4.3-совместимый код.

Возможно, вы можете попробовать фрагмент кода ниже

 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; NSError * audio_session_err = nil; [audio_session setCategory: AVAudioSessionCategoryPlayAndRecord error:&audio_session_err]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&audio_session_err]; [[AVAudioSession sharedInstance] setDelegate:self]; NSLog(@"!"); UInt32 audioRouteOverride = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,sizeof (audioRouteOverride),&audioRouteOverride); UInt32 allowMixing = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); if (audio_session_err) { NSLog(@"audioSession: %@ %d %@", [audio_session_err domain], [audio_session_err code], [audio_session_err description]); } else { audio_session_err = nil; [[AVAudioSession sharedInstance] setActive:YES error:&audio_session_err]; if (!audio_session_err) NSLog(@"audio session is activated successfully"); } 

Я думаю, audio_session = [[AVAudioSession sharedInstance] retain]; отправляет метод setMode: по умолчанию. И setMode: доступен только в iOS 5.0 и более поздних версиях (см. Doc ).

Или вы можете попытаться прокомментировать код:

 UInt32 audioRouteOverride = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,sizeof (audioRouteOverride),&audioRouteOverride); UInt32 allowMixing = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 

Должен быть метод, который отправляет setMode: по умолчанию. Попробуйте сами. :п


Попробуйте info malloc 0x706a7f0 в свой gdb, чтобы получить объект, на который был отправлен селектор. Обратите внимание: 0x706a7f0 – это адрес, указанный в вашем выводе сбоя, как один в вашем первом фрагменте кода.

И еще один совет: вы можете make clean (Poduct-> Clean) и rebuild его.

Метод AVAudioSession

 - (BOOL)setMode:(NSString *)theMode error:(NSError **)outError 

Помечается в документации как доступная только для iOS 5 и более поздних версий. Фактически, учитывая недавнее добавление режимов в документацию , похоже, что режимы аудиосессии недоступны до iOS 5.

  • iPhone - Использование возможности повторного использования для дублирования символа _OBJC_IVAR
  • iOS Mapkit - Карты кэша?
  • Ошибка UIActionSheet на iPad / не iPhone
  • iOS 4 с функциями MDM, как реализовать его?
  • Как выровнять UIButtons внутри круга?
  • почему уровень видео низкого уровня с помощью MPMoviePlayerController на iPhone
  • Левый операнд «&» - это значение для мусора
  • Просто обновлен до Xcode 6.2 - идентификатор пакета почти невозможно ввести
  • Приложение iPhone после тестирования несколько дней спустя
  • Как разрешить и IP-адрес с имени хоста на iOS
  • Пользовательский вид iOS: не удается одновременно удовлетворить ограничениям ошибок
  • Interesting Posts

    Создание инструмента ластик для приложения для рисования в iOS

    Нужен API, который обнаруживает, когда iPhone подключен

    Как остановить UIView CABasicAnimation в iPhone

    NSDictionary для NSData и NSData для NSDictionary в Swift

    перечисление всех файлов из указанных папок на Google Диске через IOS Google Drive SDK

    UICollectionView с бесконечной прокруткой?

    Установка видового экрана для масштабирования для установки как ширины, так и высоты

    Как получить данные ячейки ячейки для iPhone 5?

    ios непрерывный вызов webservice

    iOS: cocoa Pods: Как добавить новую зависимость к существующему контейнеру?

    iOS 8 – клавиатура меняет цвет, если вы нажимаете кнопку «Главная» на iPad и возвращаетесь в

    UITableView с прокруткой фонового рисунка

    MPMoviePlayerController перестает работать в полноэкранном режиме // портретная ориентация // iOS 7

    Заменить появление пробела в URL-адресе

    Разница между двумя объектами NSDate – результат также NSDate

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.