XPC remoteObjectWithErrorHandler不会抛出错误

时间:2016-02-09 23:03:20

标签: xcode swift macos xpc

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

    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 个答案:

答案 0 :(得分:0)

尽管我遇到了类似的问题并且尚未解决,但我想我可以帮助解决您在这里遗漏的问题。

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

所以……你的

connection.invalidationHandler = {
    self.helperToolConnection = nil
}

在那个时候会被调用,使连接对象无效。出于这个原因,您的后续代码根本不执行任何操作 - 因为它的所有消息都发送到 nil。

为了验证我的理论 - 只需在使 invalidationHandler 中的 helperToolConnection 无效之前添加一个 NSLog(),然后重试。