我的应用程序中有一项功能,用户可以通过单击按钮重置应用程序上的所有内容。此时,我决定使用这段代码删除整个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并在下次成功登录时重新开始的最佳/正确方法是什么?
提前致谢。
答案 0 :(得分:0)
我刚刚遇到了同样的问题并且最初尝试了你的方法,只是遇到了类似的错误。从我收集的内容来看,删除整个UIManagedDocument并不是最好的(或者至少不是必需的),而是仅删除底层持久性存储(当然,同时保持此managedObjectContext同步)。
答案 1 :(得分:0)
问题是你正在移除文件,而某些对象仍然持有对它的引用并保持打开状态。
正确的解决方案是:
[document closeWithCompletionHandler:^(BOOL success){
if([[NSFileManager defaultManager] fileExistsAtPath:[document.fileURL path]]){
[[NSFileManager defaultManager] removeItemAtURL:document.fileURL error:nil];
}