2013-10-08 4 views
2

Я разрабатываю приложение для iPhone, которое должно синхронизироваться с статусами телефонных звонков. В настоящее время я воспроизвожу аудио и/или связь с внешним аксессуаром, поэтому мое приложение может работать в фоновом режиме. Поэтому, когда есть телефонный звонок, я показываю, что пользователь говорит, что происходит телефонный звонок. Я использую CTCallCenter (используя переменную экземпляра в приложении appDelegate), чтобы отвечать на статусы телефонных звонков, и я распределяю этот экземпляр каждый раз, когда я проверяю, есть ли телефонный звонок или нет. Bur при распределении этого экземпляра каждый раз, иногда я получаю странный сбой относительно класса CUTWeakReference. Я хочу знать, есть ли практика использования CTCallCenter, когда приложение находится в фоновом режиме или приостановлено, чтобы предотвратить этот сбой? СпасибоCTCallCenter crash

ответ

0

Вопросы, которые следует учитывать, чтобы исправить проблему.

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

[[CTCallCenter alloc] init] должен быть запущен в основной очереди. Это поточно-безопасный ??? Лучше назовите его только на основной теме.

static CTCallCenter *netInfo; static dispatch_once_t dispatchToken; 
if (!netInfo) { 
    dispatch_once(&dispatchToken, ^{ 
     netInfo = [[CTCallCenter alloc] init]; 
    }); 
}