我想看看我是否对使用 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>
为什么预取不通过?为什么我的对象仍然有缺陷?我知道很难给出任何明确的答案,但任何提示或想法都会很棒!