正确的删除UIManagedDocument的方法

时间:2012-07-20 10:47:32

标签: ios5 uimanageddocument

我的应用程序中有一项功能,用户可以通过单击按钮重置应用程序上的所有内容。此时,我决定使用这段代码删除整个UIManagedDocument而不是尝试删除所有核心数据关系(Cascade Delete)和其他复杂问题

-(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并在下次成功登录时重新开始的最佳/正确方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我刚刚遇到了同样的问题并且最初尝试了你的方法,只是遇到了类似的错误。从我收集的内容来看,删除整个UIManagedDocument并不是最好的(或者至少不是必需的),而是仅删除底层持久性存储(当然,同时保持此managedObjectContext同步)。

这个答案对我有用:https://stackoverflow.com/a/8467628/671915

答案 1 :(得分:0)

问题是你正在移除文件,而某些对象仍然持有对它的引用并保持打开状态。

正确的解决方案是:

[document closeWithCompletionHandler:^(BOOL success){
    if([[NSFileManager defaultManager] fileExistsAtPath:[document.fileURL path]]){
        [[NSFileManager defaultManager] removeItemAtURL:document.fileURL error:nil];
    }