Core data &引用;核心数据无法实现故障……”;错误
我正在开发一个可可应用程序。我面临一个关键问题 我正在使用以下代码删除核心数据中名为“目录”的对象的条目:Core data &引用;核心数据无法实现故障……”;错误,core-data,Core Data,我正在开发一个可可应用程序。我面临一个关键问题 我正在使用以下代码删除核心数据中名为“目录”的对象的条目: NSEnumerator *tempDirectories = [[folderArrayController arrangedObjects] objectEnumerator]; id tempDirectory; while (tempDirectory = [tempDirectories nextObject]){ [managedObjectContext delete
NSEnumerator *tempDirectories = [[folderArrayController arrangedObjects] objectEnumerator];
id tempDirectory;
while (tempDirectory = [tempDirectories nextObject]){
[managedObjectContext deleteObject:tempDirectory];
}
但有时在删除后尝试保存时会出现异常,如“核心数据无法完成故障…”。我正在使用代码[managedObjectContext save]代码>
我是新的核心数据。。。期待解决。这是一个老问题,我一直在努力解决这个问题。因此,我认为最好将其记录下来
正如上面提到的,魏克塞尔正确地指出了这一例外的原因。但是,确定NSManagedObject子类的对象被保留的模块是一项繁忙的工作(如果文档中引用的第一个原因是问题的根本原因)
因此,我首先确定代码中保留NSManagedObject的部分,而不是保留NSManagedObject,并在需要时从中创建托管对象。类似行中的讨论可在Restkit文档中找到:
更新了我的setter和getter,使与其余模块的接口保持不变,而在内部我们现在依赖于NSManagedObjectID并避免保留NSManageObject:
-(CSTaskAbstract*)task
{
CSTaskAbstract *theTask = nil;
if (self.taskObjectID)
{
NSManagedObjectContext *moc = [(CSAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
// https://github.com/RestKit/RestKit/commit/170060549f44ee5a822ac3e93668dad3b396dc39 &
// https://github.com/RestKit/RestKit/issues/611#issuecomment-4858605
NSError *theError = nil;
NSManagedObject *theObject = [moc existingObjectWithID:self.taskObjectID
error:&theError];
if ([theObject isKindOfClass:[CSTaskAbstract class]])
{
theTask = (CSTaskAbstract*)theObject;
}
}
return theTask;
}
-(void)setTask:(CSTaskAbstract *)inTask
{
if (inTask!=self.task)
{
// Consequences of retaining a MO when it is detached from its MOC
[self setTaskObjectID:[inTask objectID]];
}
}
以上是问题解决的前半部分。我们需要找出应用程序中可疑部分的依赖性,并消除这些依赖性
还有一些其他问题,instruments->allocations是一个很好的来源,可以找出哪些模块实际保留了托管对象,exception对象将包含有关哪个托管对象产生问题的详细信息,该对象的筛选结果如下所示:
我们在一个托管对象上执行KVO。KVO保留观察到的托管对象,因此会引发异常,并且它的回溯跟踪不会来自我们的项目中。这些都很难调试,但猜测工作和跟踪对象的分配以及保留发布周期肯定会有所帮助。我删除了KVO观察部分,所有部分都开始工作。看看这里的第三段:但是如何调试并找出导致此异常的确切模块?