我正在尝试检测是否通过错误处理程序安装了帮助工具,但错误块也不会被执行块执行。当帮助程序已经安装时,它工作正常。只有在有错误时才会发现错误。在文档中,这两个块中的一个总是被执行
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)
}
答案 0 :(得分:0)
尽管我遇到了类似的问题并且尚未解决,但我想我可以帮助解决您在这里遗漏的问题。
连接对象可以毫无怨言地创建,即使您的 XPC 服务没有安装。它也可以顺利恢复。实际的连接尝试仅在您尝试发送第一条消息时发生。
所以……你的
connection.invalidationHandler = {
self.helperToolConnection = nil
}
在那个时候会被调用,使连接对象无效。出于这个原因,您的后续代码根本不执行任何操作 - 因为它的所有消息都发送到 nil。
为了验证我的理论 - 只需在使 invalidationHandler 中的 helperToolConnection
无效之前添加一个 NSLog(),然后重试。