2010-02-14 4 views
0

J'ai essayé:table de défilement vers le haut provoque l'accident

- (IBAction)openSearch { 
[tblSimpleTable scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 
[searchBar becomeFirstResponder]; 
} 

et

- (IBAction)openSearch { 
[self.tblSimpleTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
[searchBar becomeFirstResponder]; 
} 

pour obtenir la table pour faire défiler vers le haut. Les deux fonctionnent lorsque la table ne défile que légèrement vers le haut, mais se bloque avec une erreur "beyond bounds".

Des idées. Je suis assez nouveau à cela. Merci.

--Edit--

Merci pour les commentaires. Voici l'erreur précise

2010-02-15 00:49:02.010 MyApp [2935:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)' 
2010-02-15 00:49:02.016 MyApp [2935:207] Stack: (
861696817, 
860329709, 
861252493, 
861252395, 
845801683, 
845954223, 
30161, 
835250561, 
835249847, 
834989551, 
834983899, 
834971003, 
805539851, 
805539363, 
805538115, 
805537449, 
805560369, 
861158231, 
861448761, 
861447005, 
861059891, 
861060063, 
834770799, 
834765939, 
10065, 
9980 
) 
terminate called after throwing an instance of 'NSException' 
Program received signal: “SIGABRT”. 

Je n'obtiens pas ce problème lorsque je fais défiler manuellement. La table est remplie à partir d'un NSMutableArray. Est-ce que ceci est d'une aide quelconque?

Répondre

0

Peut-être un peu d'un fudge, mais il fonctionne si je clair d'abord le tableau:

searching=YES; 
[tblSimpleTable reloadData]; 
[tblSimpleTable scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 

pour la recherche = oui la table est réglé pour recharger et tableau vide. Je suppose que je pourrais repeupler la table après avoir fait cela mais je n'ai pas vraiment besoin de le faire dans ce cas. Je pense que le problème a quelque chose à voir avec les cellules de la table qui sont redessinées lorsqu'elles sont apparues pour économiser de la mémoire.

De toute façon - pour les personnes ayant le même problème: rechargez la table avec un tableau vide, faites défiler vers le haut, rechargez la table avec l'ancien tableau. J'espère que cela t'aides. Peut-être que quelqu'un va trouver une meilleure façon de le faire.

+0

Vous êtes juste en train d'esquiver un bug ici. Il reviendra certainement mordre à un moment donné. Apprenez à utiliser le débogueur ou souffrez des plantages. –

1

Aucun de ces éléments ne provoquera un plantage de sorte que votre plantage est un effet secondaire du défilement et non un résultat direct du code que vous avez collé. Il serait utile de connaître l'erreur exacte que vous voyez, mais une cause probable est que vous avez un NSArray et que vous essayez d'obtenir un élément à un index trop grand pour cela (ou éventuellement négatif). Il est probable que l'une des méthodes de délégué ou de source de données de votre vue de table soit la cause directe de l'incident, et que le défilement ne soit pertinent que parce qu'il entraîne un bogue à se manifester.

+0

Merci pour vos commentaires. J'ai édité ma question pour inclure l'erreur elle-même (car le site ne me laissera pas le mettre ici - trop longtemps). – Nik1777

+0

OK, ce n'est pas aussi utile que je l'avais espéré, mais parfois c'est comme ça que ça se passe. Mais la trace de la pile suggère que vous pouvez trouver l'erreur assez facilement. Exécutez l'application sous le débogueur (menu Exécuter -> déboguer) et exécutez-le jusqu'à ce qu'il se bloque. La fenêtre du débogueur doit afficher une trace de pile contenant l'une de vos méthodes. Cliquez sur cela et vous pouvez voir la ligne exacte où l'accident s'est produit. –

+0

Merci. Je ne suis pas trop familier avec les traces de pile.Est-ce ce que vous étiez après: 0x3293f984 <+0000> mov \t r12, # 37 \t; 0x25 0x3293f988 <+0004> svc \t 0x00000080 0x3293f98c <+0008> bcc \t 0x3293f9a4 <__kill+32> 0x3293f990 <+0012> LDR \t r12, [pc, # 4] \t; 0x3293f99c <__kill+24> 0x3293f994 <+0016> LDR \t r12, [pc, r12] 0x3293f998 <+0020> b \t 0x3293f9a0 <__kill+28> 0x3293f99c <+0024> andeq \t r9, r7, r0, LSL r7 0x3293f9a0 <+0028> bx \t r12 0x3293f9a4 <+0032> bx \t lr Il y avait une flèche rouge par la 3ème ligne – Nik1777

Questions connexes