Crash irréguliers .. que je ne comprend pas ..

Bonjour,


 


J'ai écrit et j'utilise de manière régulière une application taillé sur mes mesures (elle n'est pas publique je veut dire) .. j'arrive globalement toujours à  régler mes soucis mais la je traine un bug que je ne comprend pas et que je n'arrive pas à  résoudre .. si quelqu'un pouvais me conseiller j'en serais heureux.


 


Voilà  j'ai une contrôleur de vue avec une UITtableView dedans .. jusque la rien de particulier, quand je sélectionne une des lignes il fait donc appel à  la fonction :



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


Dans laquelle je crée un objet de la manière suivante :



//Configure la cellule avec les details de l'evenement
BDNNagiosEvents *event = [nagiosEvents objectAtIndex:[indexPath row]];

et à  priori c'est la que l'appli ce crash, voilà  le message :



Thread : Fatal Exception: NSRangeException
0 CoreFoundation 0x00000001871f1e48 __exceptionPreprocess + 132
1 libobjc.A.dylib 0x00000001978ec0e4 objc_exception_throw + 60
2 CoreFoundation 0x00000001870d777c -[__NSArrayM removeObjectAtIndex:]
3 astreinte 0x000000010004cac0 -[BDNServiceViewController tableView:cellForRowAtIndexPath:] (BDNServiceViewController.m:193)
4 UIKit 0x000000018bc9714c -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 544
5 UIKit 0x000000018bc8bd00 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2360
6 UIKit 0x000000018ba810ac -[UITableView layoutSubviews] + 172
7 UIKit 0x000000018b99da2c -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 572
8 QuartzCore 0x000000018b2f5994 -[CALayer layoutSublayers] + 168
9 QuartzCore 0x000000018b2f0564 CA::Layer::layout_if_needed(CA::Transaction*) + 320
10 QuartzCore 0x000000018b2f0408 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32
11 QuartzCore 0x000000018b2efc08 CA::Context::commit_transaction(CA::Transaction*) + 276
12 QuartzCore 0x000000018b2ef98c CA::Transaction::commit() + 436
13 QuartzCore 0x000000018b2e93bc CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80
14 CoreFoundation 0x00000001871aa14c __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
15 CoreFoundation 0x00000001871a70d8 __CFRunLoopDoObservers + 360
16 CoreFoundation 0x00000001871a74b8 __CFRunLoopRun + 836
17 CoreFoundation 0x00000001870d51f4 CFRunLoopRunSpecific + 396
18 GraphicsServices 0x000000019026b5a4 GSEventRunModal + 168
19 UIKit 0x000000018ba06784 UIApplicationMain + 1488
20 astreinte 0x000000010003ef5c main (main.m:16)
21 libdyld.dylib 0x0000000197f5aa08 start + 4

Donc si je comprend bien il crash au moment ou je fais appel à  objectAtIndex:[indexPath row] il n'y a rien puisque j'ai -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array


 


Ce que je ne comprend pas .. c'est que si j'ai des entrées dans ma UITableView (dont les cellules sont correctement renseigné) je devrais bien avoir un objet à  mon index 0 ? non ? 


 


Je doit dire que ce crash arrive vraiment dans une proportion assez faible .. je dirais une fois toutes les 200 fois ou je sélectionne quelque chose dans mon UITableView .. et forcément ça n'arrive jamais quand je test mon appli avec Xcode .. uniquement quand je l'utilise en live sur mon téléphone .. 


Pour info je remonte le crash avec Crashlytics ..


 


Merci de votre aide.


 


Cordialement


C. Brassel


Réponses

  • Ton array est vide à  ce moment la : l'index de la ligne 0 est plus grand que la taille de ton array.




  • Ton array est vide à  ce moment la : l'index de la ligne 0 est plus grand que la taille de ton array.




    Oui je comprend bien le sens du message .. mais si j'ai une cellule correctement renseigné dans mon TableView .. c'est qu'il y a forcément un objet dans cet array .. puisque c'est elle qui sert de base au remplissage des cellules .. c'est bien la mon problème .. 


     


    Bon je vais relire tout ça et mettre un peu plus de log et de test autour de la question ..


     


    Je verrais bien ..

  • Mets un arrêt sur la ligne et regarde avec le debuggeur ce que contient ton tableau "nagiosEvents".


    Il est probablement vide ou nil.



  • Ton array est vide à  ce moment la : l'index de la ligne 0 est plus grand que la taille de ton array.




    Rien de mieux qu'une vue extérieur .. j'avais beau comprendre .. visiblement ça ne faisait pas tilt .. je viens de relire tout ça et effectivement dans une de mes conditions je pouvais ne pas purger correctement une de mes array .. je viens d'apporter la correction .. je serais bien si c'était ça .. 

Connectez-vous ou Inscrivez-vous pour répondre.