我有一个非常零星的错误,包含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,以防万一这是问题,因为性能不应该是一个问题.但是我想知道有没有人想到这个bug可能在哪里.
解决方法
今天早上遇到类似的问题,并注意到我的NSManagedObjectContext是否有未保存的更改,fetchOffset可能因为任何原因而被忽略.保存上下文后,fetchOffset被正确解释.