我有一个包含 fetchLimit 和 fetchOffset 的核心数据查询的零星错误。很久很久以前(我见过它发生过一次,另一位测试人员也是如此), fetchOffset 似乎被忽略了。查询如下所示:
NSFetchRequest *fetch = [[NSFetchRequest alloc] initWithEntityName:@"MyEntity"];
NSSortDescriptor *dateDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
[fetch setSortDescriptors:sortDescriptors];
fetch.fetchOffset = 500;
fetch.fetchLimit = 1;
NSError *error = nil;
NSArray *objects = [self.managedObjectContext executeFetchRequest:fetch error:&error];
if (objects.count) {
MyEntity *objectAtLimit = [objects objectAtIndex:0];
}
这几乎总是根据需要返回第 501 个对象,但是在它破坏的那两次它返回第一个对象。
除非数据库中有 >500 行,否则查询永远不会运行。我正在使用iOS5。managedObjectContext 有一个 mainQueueConcurrencyType。
它似乎与此问题中报告的行为相同:Paging results from Core Data requests,从未解决(或至少不在列表中。)在这种情况下,基于数据模型,fetchOffset 似乎被忽略或尊重正在接受测试。
我可能会在没有 fetchOffset 的情况下重写查询,以防万一出现问题,因为性能不应该成为问题。但我想知道是否有人对错误可能在哪里有想法。