7

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

场景:我有两个表 Key & Profile 有一对一的关系。我正在使用以下代码从数据库中获取数据

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

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

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

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

任何的想法

4

2 回答 2

22

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

Apple 文档中所述:

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

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

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

于 2012-10-24T10:40:48.143 回答
19

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

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

[fetchRequest setReturnsObjectsAsFaults:NO];

但这不是必需的,并且根据您拥有的属性和获取的对象数量,可能会使用比实际需要更多的内存。

于 2012-10-25T00:36:34.840 回答