【问题标题】:Core Data Fault核心数据故障
【发布时间】:2012-10-14 07:41:32
【问题描述】:

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

场景: 我有两张表 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>)

任何想法

【问题讨论】:

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


    【解决方案1】:

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

    Apple's documentation中所述:

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

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

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

    【讨论】:

    • Restkit 中存在一些缓存问题,它没有缓存数据库中的所有对象。但是当我升级我的restkit时,缓存问题解决了。不知道真正的原因。谢谢你的回答。
    【解决方案2】:

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

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

    [fetchRequest setReturnsObjectsAsFaults:NO];
    

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

    【讨论】:

    • 找不到我的问题,但从你的回答中得到了一个想法。
    • 您没有描述任何问题。 Core Data 中的故障不是问题。还有什么你没有解释的吗?
    • 实际上我的问题是我正在使用restkit框架来映射来自服务器的json数据并从db等中获取......但是restkit存在一些缓存问题,它没有从db中获取所有数据..如果我有 50 条记录,有时它会获取 20 条记录,有时如果获取所有 50 条记录。我认为它正在缓存 pblm。我刚刚升级了我的restkit。它现在可以正常工作了。你能建议我任何关于核心数据的好教程,以便更详细地了解。谢谢
    • 我的偏好是“iOS 核心数据”,您可以在 amzn.com/0321670426 找到它(完全披露:我共同编写)。 Marcus Zarra 的书也不错。
    • 我第二次 Marcus Zarra 的书。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2010-12-22
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多