2010-03-23 6 views
0

J'utilise une UIViewController comme indiqué:UISegmentedControl avec UITableView NSRangeException

@interface RssViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,BlogRssParserDelegate> 

Je suis affichant un flux RSS dans le UITableView (en RssViewController) en fonction du segment sélectionné sur la UISegmentedControl.

Mon application tombe en panne lorsque je fais défiler la vue de table puis sélectionne un autre segment du UISegmentedControl. Par exemple, j'ai deux flux RSS par défaut J'affiche le flux RSS au segment 0. Ce flux a 36 lignes. Le flux RSS que je charge sur le segment 1 n'a que 5 lignes. Lorsque je fais défiler le flux RSS au segment 0 ALORS avant que le défilement arrête je passe au flux RSS du segment 1, je plante l'application avec l'erreur suivante:

* Terminaison de l'application en raison d'une exception non interceptée 'NSRangeException', raison: '* - [NSCFArray objectAtIndex:]: index (36) au-delà des limites (0)'

Si j'attends que le défilement du flux RSS au segment 0 s'arrête ALORS sélectionnez le segment 1, tout fonctionne correctement.

Comment puis-je arrêter ce plantage? Je voulais réutiliser la même vue de table car seules les données changent. Je peux voir qu'il se bloque à cause du nombre de lignes - je suis passé de 36 lignes à 5 lignes MAIS comment puis-je résoudre ce problème?

Toute aide/suggestion serait appréciée.

Répondre

0

Une approche rapide et sale serait de vérifier les limites du tableau que vous regardez dans tableView:cellForRowAtIndexPath: et retourner une chaîne vide si le indexPath.row est supérieur ou égal à [array count].

Vous pouvez également essayer d'utiliser deleteRowsAtIndexPaths:withRowAnimation: lors de la commutation de segments ou d'un défilement explicite à l'aide de scrollToRowAtIndexPath:atScrollPosition:animated:. Je suppose que vous appelez déjà reloadData et qu'il n'interrompt pas le défilement?

+0

Salut, Droite - J'utilise reloadData et n'interrompt pas le défilement. Je vais essayer vos suggestions et vous faire savoir comment j'ai fait. Merci pour la réponse rapide. – CraigH

+0

Salut à nouveau. D'accord, j'ai résolu le problème avec votre première suggestion. Je vais essayer vos autres suggestions lorsque le temps le permettra. Pour l'instant, en prendre soin dans tableView: cellForRowAtIndexPath: fait l'affaire. Merci. – CraigH

Questions connexes