我使用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挂起,谁拥有被出售的对象?
发布于 2012-05-20 00:08:08
我从来没有找到一种方法来足够快地关闭DO连接,以防止QC在调用connectionDidDie:之前以每秒30-60帧的速度对连接进行前端测试(并崩溃)。最终,我决定使用DO,只是为了获得对象的初始副本,然后执行深度副本,然后在没有人试图访问它的情况下终止do连接。在你深入研究之后,DO似乎并不是一个很好的解决方案。:(
https://stackoverflow.com/questions/10628858
复制相似问题