2010-05-19 11 views
6

Nella mia app provo a scorrere un UITableView in alto una volta dopo aver aggiornato il contenuto della tabella. Tuttavia, in alcune circostanze, la mia tabella è VUOTA. Così ho preso la seguente eccezione:iphone dev - come rilevare l'eccezione "NSRangeException"

terminazione app a causa di eccezione non identificata 'NSRangeException', la ragione: '- [UITableView scrollToRowAtIndexPath: atScrollPosition: animato:]: riga (0) al di là di confini (0) per la sezione (0).'

Come posso rilevare questa eccezione? Ho provato

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

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

ma non rileva l'eccezione perché indexPath non è nullo.

risposta

12

Prima di passare a un IndexPath, controllare UITableView per assicurarsi che la riga e la sezione a cui si sta tentando di scorrere siano inferiori al numero di righe e sezioni nella tabella, rispettivamente. In tal caso, non provare a scorrere su IndexPath.

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

Grazie. Questo è il modo in cui lo faccio. if (([EventTable numberOfSections]> 0) && ([EventTable numberOfRowsInSection: 0]> 0)) { \t \t [EventTable scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0] atScrollPosition: UITableViewScrollPositionTop animato: YES]; \t} – Brian

+1

&& sarà corretto invece di || ? –

+0

@ S.P che dipende se si sta verificando se scorrere o verificare se interrompere. –

6

La gestione delle eccezioni richiede un percorso diverso rispetto alle tipiche espressioni di controllo del flusso. Apple ha scritto un utile articolo su Objective-C Exception Handling. Essenzialmente vorrai avvolgere il tuo codice nei blocchi @try/@catch. È nel blocco @catch in cui si riceverà l'eccezione e si eseguiranno i passaggi successivi appropriati nel codice.

+1

@ try/@ catch funziona ma cerco sempre di evitare di utilizzarlo. Penso che sia meglio evitare l'eccezione che prenderlo quando succede =) ma grazie a – Brian

+6

concordato- la tua domanda chiedeva specificamente come rilevare l'eccezione, non come evitarlo; Stavo cercando di risponderti per te. – fbrereto

+1

Il collegamento dell'articolo è stato modificato: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/Chapters/ocExceptionHandling.html#//apple_ref/doc/uid/TP30001163-CH13-SW1 – bearMountain

Problemi correlati