2012-03-05 7 views
2

UIDocumentがクローズされている場合は、もう一度閉じることができますか?たとえそれが再オープンされた後であっても、documentStateはUIDocumentStateNormalですか?UIDocumentをもう一度閉じることができませんでしたか?

私を助けてください。どうもありがとう! closeWithCompletionHandlerは「例外」のマークで呼ば

[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' 

答えて

0

お知らせ。原因と思われる例外を読んでください。

+0

しかし、私は "CompletionHandler"はメソッドが完了したときのコールバックを意味すると思いますか?実際、このコードは私の状況の単純な例です。 – fengyuxx

+0

documentStateがUIDocumentStateNormalである別の場所で2番目のcloseWithCompletionHandlerメソッドを呼び出すと、同じ例外が発生します。 – fengyuxx

+0

あなたは正しいですが、それは準備ができていない状態のようです。 NSInvocationでopenWithCompletionHandlerの2番目の呼び出しをラップして、performSelector:AfterDelay:を呼び出しメソッドで実行します。 – fbernardo

1

instatiationごとにUIManagedDocumentを1回だけ閉じることができます。

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

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

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

+0

これは当てはまりますが、iOS 6で修正されたようです。iOS 5デバイスでアプリをテストすることは危険です。この問題が見つからない場合もあります。 – Pascal

1

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

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

0

非公開のドキュメントは、非同期アクティビティです(つまり、バックグラウンドの別のスレッドで動作します)。オープンとクローズを互いに近づけば、他のプロセスをオーバーシュートします。次のステップ(オープンまたはクローズ)を行う前に、他のスレッドが終了していることを確認してください。

関連する問題