3

アプリには、ユーザーがボタンをクリックするだけでアプリのすべてをリセットできる機能があります。この時点で、すべての Core Data リレーション (カスケード削除) やその他の複雑な問題を削除しようとする代わりに、このコードを使用して UIManagedDocument 全体を実際に削除することにしました。

-(void)cleanUpDocument
{
   [[NSFileManager defaultManager] removeItemAtPath:[self.document.fileURL path] error:nil];
}

これは、私が想定しているドキュメントを削除する必要がありますか? しかし、それは時々エラーをスローします。そして奇妙な部分は、次回ドキュメントを再作成しようとすると、「ファイルを作成できません。ファイルは既に存在します」というエラーが表示されることです。ドキュメントを作成するために使用するコードは次のとおりです:-

    if (![[NSFileManager defaultManager] fileExistsAtPath:[self.document.fileURL path]]) {
    [self.document saveToURL:self.document.fileURL
            forSaveOperation:UIDocumentSaveForCreating
           completionHandler:nil]
     }

私の質問は次のとおりです:-UIManagedDocument全体を削除/削除し、次に成功したログインで新たに開始するための最良/正しい方法は何ですか?

前もって感謝します。

4

2 に答える 2

0

私はちょうど同じ問題を抱えていて、最初はあなたのアプローチを正確に試しましたが、同様のエラーが発生しました. 私が収集したことから、UIManagedDocument 全体を削除するのは最善ではなく (または少なくとも必要ではありません)、基礎となる永続ストアのみを削除することは (もちろん、この managedObjectContext を同期させながら) 行います。

この答えは私のために働いた:https://stackoverflow.com/a/8467628/671915

于 2012-12-05T08:50:01.917 に答える
0

問題は、一部のオブジェクトがまだファイルへの参照を保持していて、ファイルを開いたままにしている間に、ファイルを削除していることです。

正しい解決策はこれを行うことです:

[document closeWithCompletionHandler:^(BOOL success){
    if([[NSFileManager defaultManager] fileExistsAtPath:[document.fileURL path]]){
        [[NSFileManager defaultManager] removeItemAtURL:document.fileURL error:nil];
    }
于 2013-09-07T14:07:56.053 に答える