AVSpeechSynthesizer вызывает сбои на iOS 8.3

У меня было несколько пользователей, сообщающих о сбоях на iOS 8.3. В журнале сбоев указано:

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

Но я не вставляю нулевые объекты ни в какие массивы.

Один из последних вызовов в трассировке стека относится к [TTSSpeechSynthesizer _startSpeakingString:orAttributedString:toURL:withLanguageCode:request:error:], поэтому я подумал, что это может быть как-то связано с AVSpeechSynthesizer — и о чудо, как только я удалил весь код TTS, приложение перестало падать.

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

У кого-нибудь есть идеи о том, что может быть причиной этого?


person bmueller    schedule 26.06.2015    source источник
comment
Я использовал AVSpeechSynthesizer, но что такое TTSSpeechSynthesizer?   -  person Andreas    schedule 26.06.2015
comment
Я предполагаю, что это какая-то частная структура, которую AVSpeechSynthesizer использует под капотом. Его нельзя использовать напрямую.   -  person bmueller    schedule 26.06.2015
comment
Я не помню, была ли у меня точно такая же проблема, но я знаю, что избавил себя от некоторой боли, повторно инициализируя синтезатор после каждого stopSpeakingAtBoundary. Синтез просто ненадежен.   -  person Andreas    schedule 26.06.2015
comment
Этот сбой происходит прямо при запуске, при первом вызове синтезатора речи.   -  person bmueller    schedule 27.06.2015


Ответы (1)


Наконец-то выяснилось, что по какой-то причине голос «en-US» иногда удаляется с устройств во время обновления iOS. Я получил в свои руки устройство, на котором возникла эта проблема, и запрос массива, в котором перечислены все голоса в системе, возвращает список всех голосов, кроме «en-US».

Я решил свою проблему, просматривая массив, чтобы увидеть, доступен ли «en-US». Если это так, я устанавливаю его как голос высказывания. Если нет, я оставляю голос пустым.

person bmueller    schedule 02.07.2015
comment
К сожалению, эта проблема не была исправлена ​​в iOS 8.4. На самом деле это гораздо более проблема теперь на iOS 9, так как многие пользователи сообщают о сбоях после обновления до iOS 9. Я зарегистрировал это как радар 22356213, если кто-то хочет обмануть его. - person bmueller; 23.09.2015
comment
Вы нашли какую-нибудь работу вокруг этого? У нас большие проблемы с этим на iOS 9 - person FeichengMaike; 15.10.2015
comment
Я так думаю - только что получил в руки устройство, с которым возникла эта проблема на прошлой неделе. См. правку выше. - person bmueller; 15.10.2015