2010-11-10 4 views
4

je reçois les erreurs suivantes, très nouveau à iphone dev et objectif C. Je suis très disposé à envoyer mon projet pour que quelqu'un regarde, je tourne en rond et je n'ai aucune idée de ce qu'il faut faire ensuite!Terminaison de l'application en raison d'exception non interceptée 'NSRangeException', raison: '*** - [NSMutableArray objectAtIndex:]: index 1 au-delà des limites [0 .. 0]'

2010-11-10 19:38:07.822 iShisha[2698:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 
*** Call stack at first throw: 
(
0 CoreFoundation      0x025f9b99 __exceptionPreprocess + 185 
1 libobjc.A.dylib      0x0274940e objc_exception_throw + 47 
2 CoreFoundation      0x025ef695 -[__NSArrayM objectAtIndex:] + 261 
3 iShisha        0x00003dc5 -[MapViewController tableView:cellForRowAtIndexPath:] + 1262 
4 UIKit        0x0032dd6f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 619 
5 UIKit        0x00323e02 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75 
6 UIKit        0x00338774 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561 
7 UIKit        0x003307ec -[UITableView layoutSubviews] + 242 
8 QuartzCore       0x046d7481 -[CALayer layoutSublayers] + 177 
9 QuartzCore       0x046d71b1 CALayerLayoutIfNeeded + 220 
10 QuartzCore       0x046d02e0 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 302 
11 QuartzCore       0x046d0040 _ZN2CA11Transaction6commitEv + 292 
12 QuartzCore       0x04700ebb _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99 
13 CoreFoundation      0x025daf4b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27 
14 CoreFoundation      0x0256fb27 __CFRunLoopDoObservers + 295 
15 CoreFoundation      0x02538ce7 __CFRunLoopRun + 1575 
16 CoreFoundation      0x02538350 CFRunLoopRunSpecific + 208 
17 CoreFoundation      0x02538271 CFRunLoopRunInMode + 97 
18 GraphicsServices     0x02ed800c GSEventRunModal + 217 
19 GraphicsServices     0x02ed80d1 GSEventRun + 115 
20 UIKit        0x002caaf2 UIApplicationMain + 1160 
21 iShisha        0x00001de8 main + 102 
22 iShisha        0x00001d79 start + 53 
) 
terminate called after throwing an instance of 'NSException' 

[Session started at 2010-11-10 19:38:15 +0000.] 
Pending breakpoint 1 - ""MapViewController.m":204" resolved 
Pending breakpoint 2 - ""MapViewController.m":317" resolved 
Pending breakpoint 3 - "objc_exception_throw" resolved 
(gdb) 
+0

Veuillez poster le code dans [TableViewViewController tableView: cellForRowAtIndexPath:] –

Répondre

10

Dans CocoaTouch, les tables ont un délégué et une source de données. Le délégué envoie et reçoit des messages pour la vue de table, et la source de données contrôle les informations qui vont dans la table et les en-têtes et pieds de page de la table. La source de données indique à la table le nombre de lignes à dessiner, le nombre de sections, le titre des sections, etcetera.

La vue de table interroge la source de données pour le nombre de lignes à tirer par la méthode

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

. Ensuite, dans le

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

méthode, la tableView demande une cellule pour remplir la table à partir de la source de données. Lors de la programmation pour l'iPhone, les tables sont principalement peuplées par un tableau, une seule variable (objet) qui contient beaucoup d'autres variables (objets). Vous dites un tableau quel objet vous voulez, en demandant

object = [array objectAtIndex:INTEGER]; //where INTEGER is an unsigned (zero or greater, no minus) 

ce qui est arrivé, est que votre source de données attend un nombre X d'objets pour la table, et il y a X-Y disponible. S'il pense qu'il y en a 10, mais qu'il n'y en a que 9, quand la table demande le 10ème objet, vous obtenez un crash car il n'y a pas d'objet à donner.

regard dans votre code pour la ligne hte

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

et voir ce que le code est. Les chances sont que vous fournissez les mauvaises données là-bas.

Bonne chance

+0

Ceci est génial! Que se passe-t-il si j'ai besoin de plus de lignes dans une section qu'une autre, par exemple, j'ai besoin de 6 lignes dans une seule et – Jon

+0

simple: if (section == 0) {return 5;} else if (section == 1) {return 3;} ce code donnera la section 0 (première section) 5 lignes, et la section 1 (2ème section) 3 lignes – Justin

+2

Grande explication. J'ai trouvé que mon problème était que mon TableView utilisait 'Static Cells' (qui était dans IB). Je l'ai changé pour 'Dynamic Prototypes' et de cette façon il n'est pas limité à une quantité statique de cellules. J'espère que cela aide quelqu'un. – styfle

1

Je ne pense pas qu'il est nécessaire de changer de statique aux cellules dynamiques pour celui-ci (il y a des cas où vous pourriez avoir besoin les cellules à être statiques). Ce qui peut avoir provoqué ce problème est que vous n'avez nommé que 0 section pour votre vue de table dans la section "Inspecteur d'attributs" du storyboard. Tout ce que vous devez faire est d'augmenter ce nombre à 1 ou autant de sections que vous pourriez avoir besoin.

Eh bien, je pense que c'est ce que le problème de @ styfle était.

Questions connexes