的iOS 9:崩溃上 - [_ NSXPCDistantObject:]方法

问题描述:

我得到一个奇怪的错误:的iOS 9:崩溃上 - [_ NSXPCDistantObject:]方法

致命异常:NSInvalidArgumentException *** - [_ NSXPCDistantObject:]方法:无协议已设置的连接连接 到服务名为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做了一个后台传输会话,但我无法重现这一点,所以我不确定它是否相关。

有没有人看过这个问题?我能做些什么来解决它?

+3

iOS 9上有很多关于通知中心和NSInvalidArgumentException的崩溃报告。它看起来像是当应用程序停止时,崩溃发生,操作系统破坏应用程序,同时仍在处理一些数据。不知道这是否是你面对的同样的错误。 –

貌似这里描述iOS中的一个错误:https://forums.developer.apple.com/thread/45651#140745

AFAICT这种崩溃是由NSURLSession的背景会话支持所致。这使用NSXPCConnection将工作传递给它的守护进程(nsurlsessiond)(不是iOS SDK的一部分,而是OS X上的公共API,因此您可以在此处阅读它)。 NSXPCConnection具有中断连接的概念,即客户端和服务器之间的IPC连接已断开但可以重新建立。 NSURLSession的后台会话支持,就像所有NSXPCConnection客户端一样,必须处理这些中断。 唉,这样做有一个错误。这个错误是一种竞争状态,表现为这次崩溃。我们希望在未来的操作系统发布中解决这个问题,但我无法分享任何具体细节。

+0

如果链接无效,您应该真正使用链接的内容编辑您的答案。就目前而言,这是一个仅链接的答案 – JAL

看来之前订阅了UIApplicationWillEnterForeground通知的内容在未取消订阅的情况下被释放,或者预期的接口不存在。

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

如果在methodSignatureForSelector上失败,则表明NSNotificationCenter想要与通知调用的方法未实现。可能是一个缺少的方法,或一个错字。

+0

感谢您的回答。问题是我没有使用'UIApplicationWillEnterForeground',而是由于提到'nsurlsessiond'的异常文本,它似乎是Apple在内部使用的东西。 – bcattle