さて、私はCocoaとObjective-C、そして一般的にOOPにかなり慣れていません。
背景として、ユーザーのドキュメントをパッケージに保存する拡張可能なエディターに取り組んでいます。もちろん、これにはいくつかの問題を回避するための「楽しみ」が必要でした(つまり、バンドル内のすべてのドキュメントNSFileWrapper
を作成しないようにするための、やや卑劣な書き込みと読み込みのプロセス)。私が到達した解決策は、基本的にサブクラスを単なるシェルとしてNSFileWrappers
扱うことでした。それを使用してバンドルのフォルダーを作成し、ドキュメントの実際のコンテンツの書き込みを他のメソッドに渡します。NSDocument
残念ながら、ある時点で私は完全に犬をねじ込んだようです。これがどのように発生したかはわかりませんが、ドキュメントウィンドウを閉じてもドキュメントが解放されなくなりました。ウィンドウが正常に閉じても、ドキュメントオブジェクトは「閉じる」メッセージ(または関連するメッセージ)を受信していないようです。
その結果、アプリを起動し、新しいドキュメントを作成して保存し、閉じてから再度開こうとすると、ドキュメントウィンドウが表示されなくなります。いくつかのクリエイティブなサブクラス化とを使用NSLogging
して、ドキュメントオブジェクトがまだメモリ内にあり、NSDocumentController
インスタンスにアタッチされていることがわかりました。そのため、ドキュメントを開こうとしても、NSDocumentController's
「うーん、現在、そのオブジェクトを開いています」チェックを通過することはありませんでした。
NSWindowController
とインスタンスはありNSDocumentController
ましたが、プロジェクトから完全に削除しました。NSDocument
問題がどこにあるかを見つけるために、ほぼすべての方法をオーバーライドしました。私の知る限り、Interface Builderのバインディングはすべて正しいです。メインメニューの「閉じる」はperformClose:
、ファーストレスポンダーなどにアタッチされています。また、新しいメインメニューとドキュメントxibも試してみました。
バンドルのコードを書くのはおかしいのではないかと思ったので、基本的にすべて削除してゼロから始めましたが、うまくいかなかったようです。メソッドオーバーライドを削除しました-init
が、それも役に立ちませんでした。ここには単純なドキュメントアプリのソースがないため、次の論理的な手順を試しませんでした(readFromUrl
andwriteToUrl
メソッドで既知の動作するコードを私のものに置き換える)。
私はこの問題を約16時間途切れることなくトラブルシューティングしてきましたが、言うまでもなく、私はロープの終わりにいます。理解できない場合は、バンドルドキュメントの混乱に基づいて、より多くのコードと強度を使用して、プロジェクトを最初から試してみるつもりです。