0

SnowLeopard用にすでに作成されているバージョンをアプリケーションに実装しようとしています。これは、SQLiteストレージを備えたドキュメントベースのアプリケーションです。各ドキュメントはSQLiteデータベースファイルとして保存されます。

NSPersistentDocumentサブクラスに適切なメソッドを実装しました。

+ (BOOL)autosavesInPlace {return YES;}
+ (BOOL)preservesVersions {return YES;}

これで、アプリケーションに「バージョンの保存」などの新しいファイルメニューが表示されます。アプリで新しいドキュメントを作成し、保存し、変更を加えて、もう一度保存します。バージョンブラウザに入ると、次のように表示されます。

kCGErrorFailure: CGSDisplayID: App trying to enumerate [0 to CGSGetNumberOfDisplays()] instead of using CGSGetDisplayList().  Compensating...
kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.

バージョン一覧のバージョンブラウザの右側にいくつかのバージョンが表示されますが、ウィンドウのスタックに表示されません。ウィンドウはスタックしているように見えますが、完全に透明です。リスト内のいずれかのバージョンをクリックすると、ログが表示されます。

CoreData: error: (8) attempt to write a readonly database

バージョンの1つを復元しようとした場合よりも、バージョンブラウザは通常は閉じていますが、ウィンドウが表示されず、プログラムが応答を停止します。

それが何を意味するのか理解できません。バージョンの保存や復元に問題がありますか?アイデアがありません。どんな助けにも感謝します。

4

1 に答える 1

1

バージョンブラウザを開いたときに、各CoreDataストアはすでにディスクに保存されています。ドキュメントを作成し、それらを読むためのオーバーライドを見ましたか?それらのどれもドキュメントを編集していないと確信していますか?また、awakeFromNibメソッドをチェックして、新しいドキュメントに何も書き込んだり保存したりしていないことを確認することもできます。

バージョンブラウザを終了するときに問題をデバッグするのは難しい場合があります。簡単にするために、現在のスキームを編集し、[オプション]タブを選択して、[[すべてのバージョンを参照]モードでデバッグを有効にする]をオンにします。

于 2011-10-18T07:36:37.697 に答える