【发布时间】:2012-05-30 07:33:13
【问题描述】:
我有一个包含 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 的情况下重写查询,以防万一出现问题,因为性能不应该成为问题。但我想知道是否有人对错误可能在哪里有想法。
【问题讨论】:
标签: objective-c ios core-data