核心数据错误

时间:2012-10-24 09:22:00

标签: objective-c ios core-data nsmanagedobjectcontext fault

我使用Restkit从服务器映射Json数据,我通过从db获取来显示这些数据。 我的视图中有一个刷新按钮,可以再次执行上述操作。

方案:    我有两张桌子Key&具有一对一关系的档案。我正在使用以下代码从DB获取数据

NSFetchRequest *fetchRequest = [Key fetchRequest];
[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObject:@"Profile"]];
[fetchRequest setIncludesSubentities:YES];
NSArray *sortedObjects = [Key executeFetchRequest:fetchRequest]; 

上面的数组返回DB中的所有对象。但当我检查使用断点时,我得到了一些核心数据错误,这是没有显示所有数据的原因。

// sortedObjects中的所有数据都是这样的。

<Key: 0x889f2f0> (entity: Key; id: 0x889e400 <x-coredata://981A476D-55AC-4CB4-BBD8-E0285E522412/Key/p1489> ; data: <fault>)

任何想法

2 个答案:

答案 0 :(得分:21)

这可能是对“错误”的误解。

Apple's documentation中所述:

  

错误是Core Data用来减少应用程序内存使用量的一种机制。

  

fault是一个占位符对象,表示尚未完全实现的托管对象,或者是表示关系的集合对象:

因此,如果您在使用Core Data时在日志中看到“fault”一词,则并不意味着发生了错误。您在应用中看到了哪些意外行为?

答案 1 :(得分:19)

您实际上没有描述过问题。核心数据故障不是错误 - 它更像是文件系统中的页面错误。它只是意味着尚未读取数据。你所描述的是完全正常和预期的。如果访问返回对象的任何属性,则会自动填充错误,您将看到结果。因此,如果您的Key实体具有名为name的属性,您仍然可以查找name的值,甚至可以根据需要记录它们。

可以通过在执行获取请求之前添加它来强制填充错误:

[fetchRequest setReturnsObjectsAsFaults:NO];

虽然它没有必要,并且取决于你拥有的属性和你获取的对象数量,可以使用比实际需要更多的内存。