核心数据故障
我使用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];
但这并不是必需的,取决于你拥有的属性和你获取的对象数量,可以使用比实际需要更多的内存。