Estoy ejecutando una solicitud de recuperación que devuelve unas 2000 entidades. Actualmente, esto demora unos 20 segundos en mi dispositivo. Así que pensé que podría establecer un límite de búsqueda de 100, y luego, cuando el usuario se desplace hasta el final de la vista de tabla, busque las siguientes 100 entidades. Esto se puede lograr usando NSFetchRequest's
setFetchLimit
y setFetchOffset
.Resultados de obtención de datos básicos de procesamiento por lotes
Sin embargo, lo que no puedo entender es, si en mi segunda búsqueda donde estoy buscando objetos 101-200, ¿qué pasaría con los objetos del 1 al 100? ¿Tendría que usar NSFetchedResultsController
por cada 100 elementos y luego configurar mis métodos de fuente de datos de vista de tabla para realizar consultas basadas en múltiples controladores de resultados de búsqueda? ¿O puedo de alguna manera usar el mismo NSFetchedResultsController
para obtener de alguna manera 100 entidades a la vez, pero en cada búsqueda posterior, solo agregue los siguientes 100 artículos a los 100 elementos originales?
Editar: Aquí está mi código:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"MessageObject" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate= [NSPredicate predicateWithFormat:@"ANY tags.tagName==%@", currentTagObject.tagName];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sort= [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:NO selector:@selector(compare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:5];
¿Puede mostrar su construcción de la solicitud de búsqueda? Por lo que yo sé, los controles de resultados obtenidos (y creo que las solicitudes de búsqueda simple también) utilizan fallas para hacer esto por usted. Es posible que su "consulta" pueda ser optimizada. –
He publicado parte de mi código. No entiendo, ¿por qué tardan 20 segundos en buscar las entidades? Cuando establezco un límite de 100, se recupera en 1 segundo, pero sin un límite, que obtiene 2000 entidades, toma 20 segundos. – Snowman