我在XCode 9,OSX而不是iOS,Objective-C。
我有一个XPC服务可以与其他应用程序通信。 XPC服务对我来说是全新的。我已经阅读了我发现的文档和文章 - 仍然需要一些帮助。
// NSXPC Connection stored as ivar
self.bridgeagent = [[NSXPCConnection alloc] initWithServiceName:@"com.myid.myapp.bridgeagent"];
self.bridgeagent.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(bridgeagentProtocol)];
self.bridgeagent.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(bridgeagentProxyProtocol)];
self.bridgeagent.exportedObject = self;
[self.bridgeagent setInvalidationHandler:^{
NSLog(@"Bridgeagent invalidation handler!");
}];
[self.bridgeagent setInterruptionHandler:^{
NSLog(@"Bridgeagent interruption handler!");
}];
[self.bridgeagent resume];
服务的调用如下:
// openFile method is listed in corresponding protocol
[[self.bridgeagent remoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) {
NSLog(@"bridgeagent.openFile errorHandler: %@",error);
}] openFile:parameters withReply:^(NSDictionary *returnParameters) { // do something with result }];
通话有效,服务也能完成。但是 - 现在服务工作我想挖掘使其更稳定(即使我现在没有遇到任何问题)。
有人可以向我解释
感谢您的帮助
答案 0 :(得分:1)
回答问题1:
[self.xpcConnection setInterruptionHandler:^{
// Connection interrupted. Backend (service) may have crashed.
// connection used to work but suddenly terminated
}];
[self.xpcConnection setInvalidationHandler:^{
// No one is listening. Is the backend running?
// connection cannot be established
}];
回答问题3:
中断:在事务中间(在发送回复之前)进行后端退出
失效:不要开始后端(服务)
回答问题2:
我听说过,如果"中断"你应该尝试重新建立连接。当您的服务是由launchd重新启动的启动代理时,如果它崩溃,这可能很有用。
实际上,在我的程序中,我不会对这些情况采取行动,而只是向命令行发出警告消息。我的前端是一个cli计划。 或者,您可以在日志文件中记录此警告,例如使用syslog。请参阅' man 3 syslog'。在我的应用程序中,我使用自己的日志文件,可配置详细程度和syslog。
亲切的问候,罗伯特