2

UIDocumentを閉じると、再び閉じることができますか?再度開いた後、documentStateがUIDocumentStateNormalである場合でも?

私を助けてください。どうもありがとう!

[document openWithCompletionHandler:^(BOOL success) {
    if (success) {

        [document closeWithCompletionHandler:^(BOOL success) {
            if (success) {

                [document openWithCompletionHandler:^(BOOL success) {
                    if (success) {

                        NSLog(@"%d", document.documentState);

                        //Exception
                        [document closeWithCompletionHandler:^(BOOL success) {
                            if (success) {
                            } 
                        }];
                    } 
                }];
            } 
        }];
    } 
}];

closeWithCompletionHandlerが「例外」マークで呼び出されると、例外がスローされます。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'closeWithCompletionHandler called while document is already closing'
4

4 に答える 4

1

私は同じ問題を抱えており、2番目のクローズを削除すると解決しました。2 番目の開閉に別の UIManagedDocument インスタンスを使用している限り、このエラーは発生しません。

また、以前のコードでは一貫してエラーが発生しなかったことがわかりました。

于 2012-04-24T16:18:22.487 に答える
1

UIManagedDocument は、インスタンスごとに 1 回しか閉じることができないようです。

私はこの問題を抱えていましたが、同じドキュメントを再度開く代わりに、同じデータで新しいドキュメントを作成することで解決しました (カスタム initWith... メソッドを使用)。

次に、ドキュメントの新しいインスタンスを「再度閉じる」ことができます。

ドキュメントの新しいインスタンスには新しい管理オブジェクト コンテキストが含まれるため、元のドキュメントの管理オブジェクトを使用しないでください。必要に応じて、新しいインスタンスでそれらを再フェッチします。

于 2012-03-28T21:28:42.677 に答える
0

ドキュメントの開閉は非同期アクティビティです (つまり、バックグラウンドで別のスレッドで実行されます)。オープンとクローズを互いに非常に接近して行うことにより、他のプロセスを踏み越えています。次のステップ (オープンまたはクローズ) を実行する前に、他のスレッドが終了していることを確認してください。

于 2013-07-07T14:11:04.573 に答える
0

closeWithCompletionHandler2 番目のメソッドを呼び出すとき、まだ最初のメソッドの中にいることに注意してください。原因と思われる例外を読み取ることによって。

于 2012-03-05T09:24:44.260 に答える