Возможная проблема с fetchLimit и fetchOffset в запросе Core Data

У меня очень спорадическая ошибка с запросом Core Data, содержащим 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.

Кажется, это то же самое поведение, что и в этом вопросе: Результаты пейджинга из запросов Core Data, которые никогда не разрешались (или, по крайней мере, не были в списке). В этом случае fetchOffset оказался либо игнорируется, либо уважается в зависимости от тестируемой модели данных.

Я, вероятно, перепишу запрос без fetchOffset, просто на тот случай, если это проблема, так как производительность не должна быть проблемой. Но мне интересно, есть ли у кого-нибудь мысли о том, где здесь может быть ошибка.

9
задан Community 23 May 2017 в 12:02
поделиться