3

我的应用程序中有一个功能,用户可以通过单击按钮重置应用程序上的所有内容。此时,我没有尝试删除所有 Core Data 关系(Cascade Delete)和其他复杂情况,而是决定使用这段代码实际删除整个 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 回答