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 のハングを防ぐにはどうすればよいですか?