忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

UIDocumentの問題点について2

わか

iOSのUIDocumentにてまたエラーが発生したので、原因と対策を記載します。


UIDocumentのopenWithCompletionHandlerにて以下のエラーが発生しました。

・エラー内容1

*** -[UIDocument _setInConflict:]: message sent to deallocated instance 0x1722d7c0


・エラー内容2
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to open or a revert document that already has an open or revert operation in flight:



・エラー内容1の原因と対策
 UIDocumentのopenWithCompletionHandlerを呼び出す前に、UIDocument自体が解放されてしまうことが問題のようでした。ARCを使用していたため、解放するタイミングはOS側の制御になりますが、これが早すぎてエラーになっていた模様。対策としては、ローカルで宣言していたUIDocumentをプロパティで宣言して使うことにしました。こうすることにより、該当クラスが存在し続ける限り解放されないことは保証されるので、本現象は発生しないと思います。ただし連続で呼び出す場合、プロパティ変数がどんどん上書きされてしまうので一つ一つ処理するように制御しないといけません。制御に関しては後述。

・エラー内容2の原因と対策
 同じドキュメントを2回連続でopenWithCompletionHandlerで呼び出そうとすると発生するようです。1回目のhandlerが呼ばれるまで2回目以降は遅延させることで解決するようです。UIDocumentStateClosedで制御しているつもりでしたが、何故か制御できていないようです。判定方法が悪かったのか何なのか謎です。なので自前で制御するのが確実です。


この方法が最善なのか分かりませんので、参考程度に読んでください。

拍手[0回]

PR