预取是不是应该返回任何错误?

Posted

技术标签:

【中文标题】预取是不是应该返回任何错误?【英文标题】:Should prefetching return any faults at all?预取是否应该返回任何错误? 【发布时间】:2012-06-24 14:50:30 【问题描述】:

我想看看我是否对使用 Core Data 进行预取有正确的理解。我正在为 Message 对象执行 batchSize 为 20 的提取请求,与 MBDate 属性具有一对一的关系。我预取了这个属性:

[fetchRequest setRelationshipKeyPathsForPrefetching:
           [NSArray arrayWithObjects:@"date", nil]];

预取命令通过,如下输出所示:

CoreData: annotation: Prefetching with key 'date'.  Got 9 rows.
CoreData: annotation: total fetch execution time: 0.0094s for 20 rows

但是,如果我这样做,就在第一批中

if(message.date.isFault) NSLog(@"isFault");,

它总是输出isFault,即使我预取了它!如果我尝试访问 MBDate 对象的任何属性,则会触发错误请求:

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATE, t0.ZDATESTRING FROM ZMBDATE t0 WHERE  t0.Z_PK = ? 
CoreData: annotation: sql connection fetch time: 0.0008s
CoreData: annotation: total fetch execution time: 0.0014s for 1 rows.
CoreData: annotation: fault fulfilled from database for : 0x85d22b0 <x-coredata://736D04C4-7DB3-40B7-B208-79B5DFD68260/MBDate/p61>

为什么预取不通过?为什么我的对象仍然有缺陷? 我知道很难给出明确的答案,但任何提示或想法都会很棒!

【问题讨论】:

【参考方案1】:

你可以在不设置批量大小的情况下尝试同样的事情吗?

fetchBatchSize下的NSFetchRequest类参考中有一个奇怪的注释:

如果您设置非零批量大小,则返回的对象集合 当 fetch 被执行时被分成多个批次。当提取是 执行,整个请求被评估和所有的身份 记录匹配对象,但不超过 batchSize 对象的数据 将一次从持久存储中获取。数组 从执行请求返回的将是一个代理对象 透明地根据需要对批次进行故障处理。

就好像你设置了batchSize,返回的对象无论如何都会出错。

【讨论】:

但是看到它的故障率远小于我的批量大小,就像每 5 个对象出错一样,当我的批量大小为 100 时。我最终运行了一个单独的提取来获取我的日期和将它们放在一个数组中,它会自动为我“预取”它们而无需执行任何其他操作

以上是关于预取是不是应该返回任何错误?的主要内容,如果未能解决你的问题,请参考以下文章

当出现错误时,我们是不是应该强调返回哪个特定的 HTTP 响应代码?

在带有 HTTP 状态代码 405 的 REST API 中返回啥错误消息?

CSV 应该返回字符串,而不是字节错误

HC-06蓝牙模块在发送AT指令设置时怎么没有任何反应??不是应该返回OK吗?

null?对象?异常?到底应该如何返回错误信息

NSData writeToFile 返回 NO 没有任何错误