2015-11-14 2 views
27

Я получаю странную ошибку:IOS 9: сбой - [_ NSXPCDistantObject methodSignatureForSelector:]

Fatal Exception: NSInvalidArgumentException *** - [_ NSXPCDistantObject methodSignatureForSelector]: Никакой протокол не был установлен на связи подключение для обслуживания под названием com.apple.nsurlsessiond»

появляется только этот вопрос, происходит на прошивке 9. по трассировке стеки, ошибка вызвана вызовом -[UIApplication _sendWillEnterForegroundCallbacks].

Thread : Fatal Exception: NSInvalidArgumentException 
0 CoreFoundation     6485512008 __exceptionPreprocess 
1 libobjc.A.dylib    6833323904 objc_exception_throw 
2 CoreFoundation     6485511824 -[NSException initWithCoder:] 
3 Foundation      6500536092 -[_NSXPCDistantObject methodSignatureForSelector:] 
4 CoreFoundation     6485526892 ___forwarding___ 
5 CoreFoundation     6484495532 _CF_forwarding_prep_0 
6 CoreFoundation     6485141004 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ 
7 CoreFoundation     6485138988 _CFXRegistrationPost 
8 CoreFoundation     6485138348 ___CFXNotificationPost_block_invoke 
9 CoreFoundation     6485554212 -[_CFXNotificationRegistrar find:object:observer:enumerator:] 
10 CoreFoundation     6484354836 _CFXNotificationPost 
11 Foundation      6500543948 -[NSNotificationCenter postNotificationName:object:userInfo:] 
12 UIKit       6577878356 -[UIApplication _sendWillEnterForegroundCallbacks] 
    continues ... 

Таким образом, похоже, что когда приложение войдет на передний план, какой-либо зарегистрированный наблюдатель пытается восстановить соединение с nsurlsessiond через RPC и не удается? Я делаю сеанс передачи фона, используя NSURLSession, но я не могу воспроизвести его, поэтому я не уверен, связано это или нет.

Кто-нибудь видел этот вопрос раньше? Есть ли что-нибудь, что я могу сделать, чтобы решить эту проблему?

+3

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

ответ

10

Похоже, ошибка в прошивкой описано здесь: https://forums.developer.apple.com/thread/45651#140745

AFAICT этот сбой вызван поддержкой фона сессии NSURLSession в. Это передает работу своему демону (nsurlsessiond), используя NSXPCConnection (не часть SDK iOS, а открытый API на OS X, поэтому вы можете прочитать об этом там). NSXPCConnection имеет понятие прерывания соединений, то есть соединение IPC между клиентом и сервером разрывается, но может быть восстановлено. Поддержка фонового сеанса NSURLSession, как и все клиенты NSXPCConnection, должна обрабатывать эти прерывания, как само собой разумеющееся. Увы, есть ошибка в том, как это происходит. Эта ошибка - это состояние гонки, которое проявляется в этом крахе. Мы надеемся исправить это в будущей версии ОС, но я не могу поделиться конкретными деталями.

+0

Вы должны действительно отредактировать свой ответ с содержимым ссылки, если ссылка становится недействительной. Как бы то ни было, это ответ только для ссылок – JAL

0

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

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

Неисправность methodSignatureForSelector указала, что метод, который NSNotificationCenter хочет позвонить с уведомлением, не выполнен. Может быть недостающий метод или опечатка.

+0

Спасибо за ответ. Проблема в том, что я не использую 'UIApplicationWillEnterForeground', скорее это похоже на то, что Apple использует внутренне из-за текста исключения, который упоминает' nsurlsessiond'. – bcattle

Смежные вопросы