iOS 9:崩溃 - [_ NSXPCDistantObject methodSignatureForSelector:]

时间:2015-11-14 00:26:42

标签: ios ios9 nsurlsession

我遇到了一个奇怪的错误:

  

致命异常:NSInvalidArgumentException   *** - [_ NSXPCDistantObject methodSignatureForSelector:]:在连接连接上没有设置协议   服务名为com.apple.nsurlsessiond“

这个问题似乎只发生在iOS 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 ... 

所以看来,当应用程序进入前台时,某些观察者注册尝试通过RPC重新连接nsurlsessiond并失败?我使用NSURLSession进行后台转移会话,但我无法重现这一点,所以我不确定它是否相关。

以前有人见过这个问题吗?有什么办法可以解决吗?

2 个答案:

答案 0 :(得分:11)

看起来像iOS中描述的错误:https://forums.developer.apple.com/thread/45651#140745

  

AFAICT此次崩溃是由NSURLSession的后台会话支持引起的。这会将工作传递给它的守护进程(nsurlsessiond)使用NSXPCConnection(不是iOS SDK的一部分,而是OS X上的公共API,所以你可以在那里阅读它)。 NSXPCConnection具有中断连接的概念,即客户端和服务器之间的IPC连接已经破坏但可以重新建立。与所有NSXPCConnection客户端一样,NSURLSession的后台会话支持必须处理这些中断。   唉,这样做有一个错误。此错误是一种竞争条件,表现为此崩溃。我们希望在未来的操作系统版本中修复此问题,但我无法分享任何具体细节。

答案 1 :(得分:0)

以前订阅UIApplicationWillEnterForeground通知的内容似乎已取消分配而未取消订阅,或者预期的界面不存在。

我会检查您的应用已订阅该通知的任何地方,并确保其正确取消订阅,并且已实施所引用的方法。

methodSignatureForSelector失败表示NSNotificationCenter想要通知通知的方法未实现。可能是一个缺失的方法,或一个错字。