2010-10-19 10 views
7

Lo publiqué en los foros de desarrollo de Apple aquí ya que me parece un error en el SDK real, pero pensé que también lo publicaría aquí y vería si alguien podría verificar si estoy usando esto incorrectamente (no lo parece) o si este es un comportamiento defectuoso.NSFetchedResultsSectionInfo no está de acuerdo con la cantidad de objetos que tiene

https://devforums.apple.com/thread/72738

-

Después de pasar un rato depurar algún código, he descubierto un comportamiento muy extraño y preocupante de una instancia de NSFetchedResultsSectionInfo.

NSFetchedResultsController *frc = [self frcForTableView:tableView]; 

id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex: 
               [indexPath indexAtPosition:1]]; 

NSLog(@"Looking at %@ with section %@ (%d objects)", 
     indexPath, [sectionInfo objects], [sectionInfo numberOfObjects]); 

Básicamente, agarrar una FRC, a continuación, tire de uno de los sectionInfo objetos fuera de ella (no se preocupe por eso que estoy agarrando índice de posición ruta 1 en vez de 0 ... que no debería asunto aquí). Lo interesante es que la salida NSLog de lo anterior es la siguiente:

Looking at <NSIndexPath 0x8828ee0> 2 indexes [0, 0] with section (
    "TBN.B x 1 for order 1187", 
    "TBN.T x 1 for order 1187" 
) (1 objects)` 

Así la matriz [sectionInfo objects] tiene dos cosas en él, pero [sectionInfo numberOfObjects] informes que sólo tiene uno. Para eliminar la posibilidad de un problema de almacenamiento en caché, deshabilité todo el almacenamiento en caché en la configuración de FRC antes de ejecutar este código.

Bastante perplejo aquí. No sé cómo un solo objeto de información de sección puede estar en desacuerdo consigo mismo sobre cuántos objetos tiene.

¿Alguna idea de los desarrolladores de Apple? Ejecutando XCode 3.2.4 y el 4.1 SDK.

Editar: FYI el objeto correcto para esta sección es en realidad la primera (TBN.B) por lo que en mis pruebas hasta ahora parece que si sólo tenemos en cuenta la parte de la matriz de objetos de hasta numberOfObjects continuación, se obtiene los resultados correctos. Sin embargo, sigue sintiendo curiosidad sobre por qué el objeto adicional aparece al final de la matriz cuando no forma parte de esa sección.

+0

Esto podría estar relacionado con el problema que estaba teniendo: http://stackoverflow.com/questions/10619750/nsfetchedresultscontroller-trying-to-limit-number-of-records-displayed Ver un enlace? – trapper

Respuesta

0

Mis pruebas han demostrado que la matriz de "objetos" de la primera sección siempre contiene todos los objetos en el controlador. Creo que es un error de framework.

eso es un muy sucio (y lento) Solución:

NSArray * allObjects = self.cachedFetchedResultsController.fetchedObjects; 
NSMutableArray * objectsInSectionZero = [NSMutableArray array]; 
for (id obj in allObjects) { 
    if ([[self.cachedFetchedResultsController indexPathForObject:obj] section] == indexPath.section) { 
     [objectsInSectionZero addObject:obj]; 
    } 
} 
1

Aquí es 5 1/2 años después de la pregunta fue hecha originalmente. Estamos en Xcode 7.x y el error parece estar todavía aquí. ¿Alguien ha descubierto por qué sucede esto? La solución que he encontrado es simplemente verificar esta condición en controllerDiDChangeContent y si existe, recrear el FRC. Para mí, está bien, ya que esto solo ocurre cuando comienzas con 0 secciones y añades una 2ª debajo. Aquí hay un muy buen artículo sobre cómo recrear este error. Supongo que no muchas personas están poniendo totales en sus pies de página.

https://devforums.apple.com/message/328077#328077

Cuestiones relacionadas