0

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

4

1 に答える 1

0

connectionDidDie: が呼び出される前に、1 秒あたり 30 ~ 60 フレームで描画し、接続をフロント テスト (およびクラッシュ) する QC を防ぐのに十分な速さで DO 接続をシャットダウンする方法を見つけることができませんでした。最終的に、オブジェクトの初期コピーを取得するためだけに DO を使用することにしました。次に、オブジェクトのディープ コピーを作成し、何もアクセスしようとしない間に DO 接続を切断します。あなたがそれを掘り下げた後、DOはそれほど素晴らしい解決策ではないようです。:(

于 2012-05-19T16:08:08.057 に答える