2010-05-19 10 views
6

En mi aplicación, intento desplazar una UITableView a la parte superior una vez después de actualizar el contenido de la tabla. Sin embargo, bajo alguna circunstancia, mi mesa está VACÍA. Así que me dio la siguiente excepción:iphone dev: cómo detectar excepción 'NSRangeException'

Terminación de aplicación debido a excepción no detectada 'NSRangeException', razón: '- [UITableView scrollToRowAtIndexPath: atScrollPosition: animada:]: fila (0) más allá de los límites (0) de la sección (0). '

¿cómo puedo detectar esta excepción? Probé

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

if (indexPath != nil) { 
    [EventTable scrollToRowAtIndexPath:indexPath 
       atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
} 

pero no capta la excepción porque indexPath no es nulo.

Respuesta

12

Antes de desplazarse a IndexPath, verifique su UITableView para asegurarse de que la fila y la sección que está tratando de desplazarse son menores que el número de filas y secciones en su tabla, respectivamente. Si es así, no intente desplazarse a ese IndexPath.

if ([tableView numberOfSections] < section || [tableView numberOfRowsInSection] < row) 
+0

Gracias. Esa es la forma en que lo hago. if (([EventTable numberOfSections]> 0) && ([EventTable numberOfRowsInSection: 0]> 0)) { \t \t [EventTable scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 insection: 0] atScrollPosition: UITableViewScrollPositionTop animado: YES]; \t} – Brian

+1

&& serán correctos en lugar de || ? –

+0

@ S.P que depende si está probando si desplazarse, o probar si abortar. –

6

El manejo de excepciones toma una ruta diferente a las expresiones típicas de control de flujo. Apple ha escrito un artículo útil en Objective-C Exception Handling. Básicamente, querrá ajustar su código en los bloques @try/@catch. Está en el bloque @catch donde recibirá la excepción y realizará los próximos pasos apropiados en su código.

+1

@ try/@ catch funciona pero siempre trato de evitar usarlo. Creo que es mejor evitar la excepción que atraparla cuando sucede =) pero gracias – Brian

+6

De acuerdo, su pregunta era específicamente sobre cómo atrapar la excepción, no cómo evitarla; Intentaba responder eso por ti. – fbrereto

+1

El enlace del artículo ha cambiado: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/Chapters/ocExceptionHandling.html#//apple_ref/doc/uid/TP30001163-CH13-SW1 – bearMountain

Cuestiones relacionadas