2010-10-19 6 views
7

Ho postato questo sui forum di Apple Dev qui poiché mi sembra un errore nell'SDK effettivo, ma ho pensato di pubblicarlo anche qui e vedere se qualcuno potrebbe verificare se sto usando questa cosa in modo non corretto (non sembra come) o questo è un comportamento rotto.NSFetchedResultsSectionInfo non concorda con se stesso su quanti oggetti ha

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

-

Dopo aver trascorso un po 'durante il debug del codice, ho scoperto un comportamento molto strano e preoccupante di un'istanza di 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]); 

Fondamentalmente, io afferrare un FRC, quindi tirare uno dei sectionInfo oggetti fuori di esso (non ti preoccupare perché sto prendendo per l'indice posizione percorso 1 invece di 0 ... non dovrebbe importa qui). La cosa interessante è che l'uscita NSLog per quanto sopra è questo:

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)` 

Così l'array [sectionInfo objects] ha due cose in esso, ma [sectionInfo numberOfObjects] rapporti che ha solo uno. Per eliminare la possibilità di un problema di memorizzazione nella cache ho disabilitato tutto il caching nella configurazione FRC prima di eseguire questo codice.

Abbastanza stanco qui. Non so come una singola sezioneInfo possa essere in disaccordo con se stessa su quanti oggetti ha in essa.

Qualche idea dagli sviluppatori Apple? Esecuzione di XCode 3.2.4 e 4.1 SDK.

Edit: FYI l'oggetto giusto per questa sezione è in realtà il primo (TBN.B) così nel mio test finora sembra che se si considera solo la parte della matrice oggetti fino a numberOfObjects allora si ottiene i risultati giusti. Tuttavia, è ancora curioso di sapere perché l'oggetto extra appare alla fine dell'array quando non fa parte di quella sezione.

+0

Questo potrebbe essere correlato al problema che stavo avendo: http://stackoverflow.com/questions/10619750/nsfetchedresultscontroller-trying-to-limit-number-of-records-displayed vedere un link? – trapper

risposta

0

I miei test hanno mostrato che l'array "objects" della prima sezione contiene sempre tutti gli oggetti nel controller. Penso che questo sia un bug del framework.

Quello è un molto sporca (e lento) soluzione:

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

Qui è 5 1/2 anni dopo la questione è stato originariamente chiesto. Siamo su Xcode 7.x e il bug sembra essere ancora qui. Qualcuno ha capito perché questo sta accadendo. La soluzione che ho trovato è semplicemente quella di verificare questa condizione in controllerDiDChangeContent e, se esiste, ricreare il FRC. Per me, va bene dato che questo accade solo quando inizi con 0 sezioni e ne aggiungi una seconda al di sotto. Ecco un ottimo articolo su come ricreare questo bug. Immagino non che molte persone stanno mettendo i totali nei loro footer.

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