Objective-C Distributed Objects (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];
現在、私の接続DidDieは次のようになっています。
- (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
}
どちらの場合も、この EXCEPTION をトリガーするのはこのテストです。
販売されたオブジェクトを持っている最初のアプリケーションをシャットダウンするときに、Quartz のハングを防ぐにはどうすればよいですか?