1

僵尸启用,我在下面的saveToURL电话获取的称号(消息发送到NSError的释放的实例)错误:- [NSError保留]:消息发送到释放实例

[aDocument saveToURL:aDocument.fileURL 
forSaveOperation:UIDocumentSaveForOverwriting 
completionHandler:^(BOOL success) { ... 

堆栈跟踪如下所示:

enter image description here

aDocument是UIManagedDocument的子类的实例。我有并发调试,我已经看看是否有任何线程冲突,还没有找到任何。我怎样才能调试呢?

编辑:另外尝试下面的代码发生

__weak typeof(self) weakSelf = self; 

    [aDocument saveToURL:aDocument.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) { 
     if (success) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [weakSelf documentSaved:aDocument forRestoredAssessment:patientAssessment]; 
      }); 
     } 
    }]; 

编辑死机一样:赏金增加

+1

你在completionHandler里面做什么? – ppalancica

+0

这种方法被称为... [self documentSaved:a Document for ReestoredAssessment:patientAssessment];这是一大堆东西。 –

+0

通常,在UIKit中触摸ANYING或从任何不是主队列的线程直接与UIKit相关是不安全的。事实上,我认为这是问题的核心。 – Mgetz

回答

0

我相信我弄清楚是什么导致了这一点,因为我做了以下更改,然后错误消失了。这个错误很难解决,尽管它并没有直接指出这是原因。

我正在使用UIDocumentSaveForOverwriting,但我发现有时该文件已被其他进程删除。

因此,要解决我测试文件存在的问题,然后使用UIDocumentSaveForOverwriting或基于此的UIDocumentSaveForCreating。

-1

似乎调用完成块代码的对象可能不是在那个时候是各地,所以你需要一些方法来保持活力。

试试这个代码:

__weak typeof(self) weakSelf = self; 

dispatch_async(dispatch_get_main_queue(), ^{ 
    [weakSelf documentSaved:aDocument forRestoredAssessment:patientAssessment]; 
}); 

让我知道,如果你仍然有问题。

+0

以下的答案我试过你的解决方案。我犯了同样的错误。我真的不认为它在该块内部崩溃。我怀疑当另一个线程尝试去保存时,它可能与尝试保存有关。 –

+0

@BradThomas文档是函数/方法或某个类变量的局部变量吗? – ppalancica

+0

aDocument是传入方法的参数 –

相关问题