核心数据故障

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

场景:我有两个表Key和Profile,它们有一对一的关系。 我使用以下代码从DB获取数据

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

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

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

  (entity: Key; id: 0x889e400  ; data: ) 

任何想法

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

如Apple的文档中所述 :

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

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

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

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

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

 [fetchRequest setReturnsObjectsAsFaults:NO]; 

但这并不是必需的,取决于你拥有的属性和你获取的对象数量,可以使用比实际需要更多的内存。

Interesting Posts