我正在使用 Objective-C 分布式对象 (DO) 将数据从一个应用程序(从网络收集数据)共享到另一个应用程序(Quartz Composer 中的一个补丁)。当与远程对象的连接失败时(当我关闭第一个应用程序时),我得到:
5/16/12 8:17:06.373 PM Quartz Composer: *** EXCEPTION IGNORED: connection went invalid while waiting for a reply because a mach port died
在那之后,Quartz 组合被挂起。即使在我恢复第一个应用程序之后,它仍然挂起。我希望 Quartz 补丁重新连接。
我正在使用通知中心关闭旧对象,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(connectionDidDie)
name:NSConnectionDidDieNotification
object:theConnection];
现在,我的 counnectionDidDie 看起来像这样:
- (void) connectionDidDie
{
NSLog(@"Connection died and we detected it");
[[self proxyObject] release];
[self setProxyObject:nil];
theConnection = nil;
}
我还检查以确保连接仍然存在,就在访问 proxyObject 的任何部分之前,如下所示:
if ([NSConnection defaultConnection]) { // this line triggers the exception
// access proxyObject
}
我也试过
if ([theConnection isValid]) { // this line triggers the exception
// access proxyObject
}
在这两种情况下,正是这个测试触发了这个异常。
当我关闭第一个应用程序时,我能做些什么来防止 Quartz 挂起,谁拥有出售的对象?