XPC remoteObjectWithErrorHandler 不会抛出错误

Posted

技术标签:

【中文标题】XPC remoteObjectWithErrorHandler 不会抛出错误【英文标题】:XPC remoteObjectWithErrorHandler wont throw an error 【发布时间】:2016-02-09 23:03:20 【问题描述】:

我正在尝试检测是否通过错误处理程序安装了帮助工具,但错误块不会被执行,成功块也不会执行。当助手已经安装时,它工作正常。它只是不会在有错误时捕获错误。在文档中,这两个块中的一个总是被执行

    if helperToolConnection == nil 
        let connection = NSXPCConnection(machServiceName: "**bundle identifier**", options: NSXPCConnectionOptions.Privileged)
        connection.remoteObjectInterface = NSXPCInterface(withProtocol: HelperProtocol.self)
        connection.invalidationHandler = 
            self.helperToolConnection = nil
        
        connection.resume()
        helperToolConnection = connection
    

    let helper = helperToolConnection!.remoteObjectProxyWithErrorHandler()  error in
        NSLog("Failed to connect: \(error)")
        withReply(nil)
     as! HelperProtocol
    helper.connectWithEndpointReply()  endpoint -> Void in
        withReply(endpoint)
    

【问题讨论】:

那么你看到了什么效果?它会崩溃吗,如果是,在哪里以及出现什么错误? 【参考方案1】:

虽然我遇到了类似的问题并且尚未解决,但我想我可以帮助您解决这里错过的问题。

连接对象可以毫无怨言地创建,即使您的 XPC 服务没有安装。它也可以顺利恢复。实际的连接尝试仅在您尝试发送第一条消息时发生

所以...你的

connection.invalidationHandler = 
    self.helperToolConnection = nil

此时将被调用,使连接对象无效。因此,您的后续代码什么都不做 - 因为它的所有消息都发送到 nil。

要验证我的理论 - 只需在您取消 invalidationHandler 中的 helperToolConnection 之前添加一个 NSLog(),然后重试。

【讨论】:

以上是关于XPC remoteObjectWithErrorHandler 不会抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

XPC 服务阵列崩溃

线程和 XPC

从 XPC 服务创建 NSXPCConnection

Xcode 5 上的 XPC 测试包

如何在macOS上使用MTLSharedTextureHandle或MTLSharedEventHandle与C XPC接口?

非常简单的 macOS XPC