2010-05-19 7 views
6

Dans mon application, j'essaie de faire défiler une UITableView vers le haut une fois après avoir mis à jour le contenu de la table. Cependant, dans certaines circonstances, ma table est vide. Donc, je suis l'exception suivante:iphone dev - comment attraper exception « NSRangeException »

Mettre fin application en raison d'une exception non interceptée 'NSRangeException', raison: « - [UITableView scrollToRowAtIndexPath: atScrollPosition: animation:]: ligne (0) au-delà des limites (0) pour la section (0). '

comment puis-je attraper cette exception? J'ai essayé

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

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

mais il n'attrape pas l'exception car indexPath n'est pas nul.

Répondre

12

Avant le défilement à un indexPath, vérifiez votre UITableView pour vous assurer que la ligne et la section que vous essayez de faire défiler à moins que le nombre de lignes et de section dans votre table, respectivement. Si c'est le cas, n'essayez pas de faire défiler jusqu'à IndexPath.

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

Merci. C'est comme ça que je le fais. if (([eventTable NumberOfSections]> 0) && ([eventTable numberOfRowsInSection: 0]> 0)) { \t \t [eventTable scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 lasection: 0] atScrollPosition: UITableViewScrollPositionTop animé: OUI]; \t} – Brian

+1

&& sera correct au lieu de || ? –

+0

@ S.P cela dépend si vous testez si vous voulez faire défiler ou tester si vous souhaitez annuler. –

6

La gestion des exceptions prend un chemin différent de celui des expressions de contrôle de flux classiques. Apple a rédigé un article utile sur Objective-C Exception Handling. Essentiellement, vous voudrez envelopper votre code dans @try/@catch blocs. C'est dans le bloc @catch que vous recevrez l'exception et effectuerez les prochaines étapes appropriées dans votre code.

+1

@ try/@ catch fonctionne mais j'essaie toujours d'éviter de l'utiliser. Je pense qu'il est préférable d'éviter l'exception que de l'attraper quand cela arrive =) mais merci – Brian

+6

D'accord - votre question demandait spécifiquement comment attraper l'exception, pas comment l'éviter; J'essayais de répondre à cela pour vous. – fbrereto

+1

lien article a changé: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/Chapters/ocExceptionHandling.html#//apple_ref/doc/uid/TP30001163-CH13-SW1 – bearMountain

Questions connexes