Así que estoy tratando de actualizar una celda con la imagen entrante. Tengo un protocolo que devuelve la llamada al método correspondiente cuando se realiza la imagen DLing. La fuente de UITable es un NSArray de objetos "Reunión". Cada reunión tiene indexPath de su celda de la tabla, que me sale en una -iphone UITable reloadRowsAtIndexPaths problema muy extraño
(UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Meeting * meeting = [tableDataSource objectAtIndex:indexPath.row];
... cell's init code
meeting.cellPath = indexPath; // also tried [indexPath copy];
...
}
el problema es cuando estoy tratando de actualizar celular con almacenada IndexPath Im conseguir un extraño error que dice acerca de algunas matriz NSMutable que no lo hago tener:
2012-07-20 20:15:18.007 MyNewbieApp[5734:207] meeting.cellPath = [row = 2,section = 0]
2012-07-20 20:15:18.705 MyNewbieApp[5734:207] meeting.cellPath = [row = 4,section = 0]
2012-07-20 20:15:18.728 MyNewbieApp[5734:207] meeting.cellPath = [row = 5,section = 0]
2012-07-20 20:15:18.730 MyNewbieApp[5734:207] downloadDidFinishDownloading <NSIndexPath 0x79456f0> 2 indexes [0, 5]
2012-07-20 20:15:18.732 MyNewbieApp[5734:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 3 beyond bounds [0 .. 2]'
*** Call stack at first throw:
(
0 CoreFoundation 0x02c70b99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02a6540e objc_exception_throw + 47
2 CoreFoundation 0x02c66695 -[__NSArrayM objectAtIndex:] + 261
3 UIKit 0x00556327 -[_UITableViewUpdateSupport(Private) _setupAnimationsForExistingVisibleCells] + 264
4 UIKit 0x00555b9b -[_UITableViewUpdateSupport initWithTableView:updateItems:oldRowData:newRowData:oldRowRange:newRowRange:context:] + 436
5 UIKit 0x003ab5d6 -[UITableView(_UITableViewPrivate) _updateWithItems:withOldRowData:oldRowRange:newRowRange:context:] + 1323
6 UIKit 0x003a7f03 -[UITableView(_UITableViewPrivate) _endCellAnimationsWithContext:] + 9179
7 UIKit 0x003974d3 -[UITableView reloadRowsAtIndexPaths:withRowAnimation:] + 56
8 MyNewbieApp 0x00017354 -[MeetingsVC downloadDidFinishDownloading:] + 174
9 MyNewbieApp 0x000173a6 -[MeetingsVC download:didFailWithError:] + 43
10 MyNewbieApp 0x00010e5f -[Meeting image] + 317
11 MyNewbieApp 0x00016f49 -[MeetingsVC tableView:cellForRowAtIndexPath:] + 2141
12 UIKit 0x0039ed6f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 619
13 UIKit 0x00394e02 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
14 UIKit 0x003a9774 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
15 UIKit 0x003a17ec -[UITableView layoutSubviews] + 242
16 QuartzCore 0x02619481 -[CALayer layoutSublayers] + 177
17 QuartzCore 0x026191b1 CALayerLayoutIfNeeded + 220
18 QuartzCore 0x026122e0 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 302
19 QuartzCore 0x02612040 _ZN2CA11Transaction6commitEv + 292
20 QuartzCore 0x02642ebb _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
21 CoreFoundation 0x02c51f4b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
22 CoreFoundation 0x02be6b27 __CFRunLoopDoObservers + 295
23 CoreFoundation 0x02bafce7 __CFRunLoopRun + 1575
24 CoreFoundation 0x02baf350 CFRunLoopRunSpecific + 208
25 CoreFoundation 0x02baf271 CFRunLoopRunInMode + 97
26 GraphicsServices 0x0318000c GSEventRunModal + 217
27 GraphicsServices 0x031800d1 GSEventRun + 115
28 UIKit 0x0033baf2 UIApplicationMain + 1160
29 MyNewbieApp 0x00002034 main + 102
30 MyNewbieApp 0x00001fc5 start + 53
)
terminate called after throwing an instance of 'NSException'
por lo que su matriz de índice de excepción fuera de los límites. Por no tengo NSMutableArray que tenga 3 elementos. Todas mis matrices son mucho más grandes. Ah, la excepción sale de aquí:
- (void)downloadDidFinishDownloading:(Meeting *)meeting
{
NSLog(@"downloadDidFinishDownloading %@",meeting.cellPath);
//NSLog(@"downloadDidFinishDownloading meeting.cellPath = [row = %d,section = %d]",meeting.cellPath.row,meeting.cellPath.section);
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:meeting.cellPath] withRowAnimation:UITableViewRowAnimationNone];
meeting.delegate = nil;
}
- (void)download:(Meeting *)meeting didFailWithError:(NSError *)error{
[self downloadDidFinishDownloading:meeting];
}
este método de devolución de llamada se invoca cada vez que se ha realizado la reunión de la imagen DLing. Y si solo voy a comentar la línea de código con reloadRowsAtIndexPaths, todo funciona bien. De lo contrario, recibo un error. ¿Qué podría ser? Pasé muchas horas pero es inútil ... Simplemente no tengo pegamento. Todo es cuestión de ... Y lo que es aún más extraño, el problema viene siempre con el quinto elemento :) cuando estoy desplazando el contenido de la tabla arriba. Y no hay nada especial con el 5 ° elemento, ya lo intenté con otro conjunto de datos, pero el problema persiste.
actualizado: El error/bloqueo ocurre solo cuando el código devuelve la llamada al método download:(Meeting *)meeting didFailWithError
. Pero aún tiene el mismo parámetro de reunión que envío al downloadDidFinishDownloading
. También probé siguiente:
- (void)download:(Meeting *)meeting didFailWithError:(NSError *)error{
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:meeting.cellPath] withRowAnimation:UITableViewRowAnimationNone];
meeting.delegate = nil;
}
tan aplicación se bloquea sólo en este método en reloadRowsAtIndexPaths.
¿por qué volver a cargar la fila si la descarga no? ¿Algo cambió en la fila? – moxy
sí, detiene y oculta la ruleta y hace visible UILabel que dice "DL err" – Stan