首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C:在分布式对象的NSConnection失败时避免异常

Objective-C:在分布式对象的NSConnection失败时避免异常
EN

Stack Overflow用户
提问于 2012-05-17 09:38:23
回答 1查看 483关注 0票数 0

我使用Objective-C分布式对象(DO)将数据从一个应用程序(从网络收集数据)共享到另一个应用程序( Quartz Composer中的一个补丁)。当到远程对象的连接失败时(当我关闭第一个应用程序时),我得到:

代码语言:javascript
复制
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补丁重新连接。

我正在使用通知中心关闭旧对象,如下所示:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(connectionDidDie)
                                             name:NSConnectionDidDieNotification
                                           object:theConnection];

现在,我的counnectionDidDie看起来像这样:

代码语言:javascript
复制
- (void) connectionDidDie
{
    NSLog(@"Connection died and we detected it");
    [[self proxyObject] release];
    [self setProxyObject:nil];
    theConnection = nil;
}

在访问proxyObject的任何部分之前,我还会检查以确保连接仍然有效,如下所示:

代码语言:javascript
复制
if ([NSConnection defaultConnection]) { // this line triggers the exception
    // access proxyObject
}

我也试过

代码语言:javascript
复制
if ([theConnection isValid]) { // this line triggers the exception
    // access proxyObject
}

在这两种情况下,都是这个测试触发了这个异常。

当我关闭第一个应用程序时,我可以做些什么来防止Quartz挂起,谁拥有被出售的对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-20 00:08:08

我从来没有找到一种方法来足够快地关闭DO连接,以防止QC在调用connectionDidDie:之前以每秒30-60帧的速度对连接进行前端测试(并崩溃)。最终,我决定使用DO,只是为了获得对象的初始副本,然后执行深度副本,然后在没有人试图访问它的情况下终止do连接。在你深入研究之后,DO似乎并不是一个很好的解决方案。:(

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10628858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档