【问题标题】:Correct way to remove a UIManagedDocument删除 UIManagedDocument 的正确方法
【发布时间】:2012-07-19 15:19:48
【问题描述】:

我的应用程序中有一个功能,用户可以通过单击按钮重置应用程序上的所有内容。此时,我没有尝试删除所有 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 并在下次成功登录时重新开始的最佳/正确方法是什么?

提前致谢。

【问题讨论】:

标签: ios5 uimanageddocument


【解决方案1】:

我刚遇到同样的问题,一开始完全尝试了你的方法,但遇到了类似的错误。据我所知,删除整个 UIManagedDocument 并不是最好的(或至少没有必要),而只是删除底层的持久存储(当然,同时保持这个 managedObjectContext 同步)。

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

【讨论】:

    【解决方案2】:

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

    正确的解决办法是这样做:

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

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 2015-07-18
      • 2017-07-24
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多