我遇到了一个奇怪的错误:
致命异常: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
进行后台转移会话,但我无法重现这一点,所以我不确定它是否相关。
以前有人见过这个问题吗?有什么办法可以解决吗?
答案 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
想要通知通知的方法未实现。可能是一个缺失的方法,或一个错字。