2016-05-17 2 views
1

Crashlytics me donne la piletrace suivante. L'incident se produit de manière incohérente. Se produit sur tous les appareils iOS 9 mais très rarement. Impossible de comprendre la source du problème. N'a pas eu lieu sur l'un des appareils que j'ai essayé de planter au cours des 3 derniers jours.Crash spécialisé de Swift sur UICollectionView cellForItemAtIndexPath

Crashed: com.apple.main-thread 
0 cherish      0x10014ee18 specialized PersonalizeViewController.collectionView(UICollectionView, cellForItemAtIndexPath : NSIndexPath) -> UICollectionViewCell (PersonalizeViewController.swift:159) 
1 cherish      0x1001497f0 @objc PersonalizeViewController.collectionView(UICollectionView, cellForItemAtIndexPath : NSIndexPath) -> UICollectionViewCell (PersonalizeViewController.swift) 
2 UIKit       0x188aef3a8 <redacted> + 432 
3 UIKit       0x188311adc <redacted> + 4628 
4 UIKit       0x18830c808 <redacted> + 228 
5 UIKit       0x1882a81e4 <redacted> + 656 
6 QuartzCore      0x185c3a994 <redacted> + 148 
7 QuartzCore      0x185c355d0 <redacted> + 292 
8 QuartzCore      0x185c35490 <redacted> + 32 
9 QuartzCore      0x185c34ac0 <redacted> + 252 
10 QuartzCore      0x185c34820 <redacted> + 500 
11 QuartzCore      0x185c2dde4 <redacted> + 80 
12 CoreFoundation     0x183104728 <redacted> + 32 
13 CoreFoundation     0x1831024cc <redacted> + 372 
14 CoreFoundation     0x1831028fc <redacted> + 928 
15 CoreFoundation     0x18302cc50 CFRunLoopRunSpecific + 384 
16 GraphicsServices    0x184914088 GSEventRunModal + 180 
17 UIKit       0x188316088 UIApplicationMain + 204 
18 cherish      0x100142a50 main (AppDelegate.swift:19) 
19 libdispatch.dylib    0x182bca8b8 (Missing) 

Le code où il plante est:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     if collectionView.tag == 1 { 
      (---crash line---) let cell = select_date_collection_view.dequeueReusableCellWithReuseIdentifier(PERSONALIZE_SELECT_DATE_COLLECTION_CELL_IDENTIFIER, forIndexPath: indexPath) as! SelectDateCollectionViewCell 
      // Some changes to cell objects 
      return cell 
     } else if collectionView.tag == 2 { 
      let cell = select_time_collection_view.dequeueReusableCellWithReuseIdentifier(PERSONALIZE_SELECT_TIME_COLLECTION_CELL_IDENTIFIER, forIndexPath: indexPath) as! SelectTimeCollectionViewCell 
      // Some changes to cell objects 
      return cell 
     } else if collectionView.tag == 3 { 
      let cell = add_customization_collection_view.dequeueReusableCellWithReuseIdentifier(PERSONALIZE_ADD_CUSTOMIZATION_COLLECTION_CELL_IDENTIFIER, forIndexPath: indexPath) as! AddCustomizationCollectionViewCell 
      // Some changes to cell objects 
      return cell 
     } 

     let cell: UICollectionViewCell = UICollectionViewCell() 
     return cell 
    } 

initialisé toutes les vues de collecte dans le viewDidLoad()

 select_date_collection_view.registerNib(UINib(nibName: "SelectDateCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: PERSONALIZE_SELECT_DATE_COLLECTION_CELL_IDENTIFIER) 
     select_date_collection_view.tag = 1 
     select_date_collection_view.dataSource = self 
     select_date_collection_view.delegate = self 
     select_date_collection_view.showsHorizontalScrollIndicator = false 
     select_date_collection_view.showsVerticalScrollIndicator = false 
     select_date_collection_view.reloadData() 

     select_time_collection_view.registerNib(UINib(nibName: "SelectTimeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: PERSONALIZE_SELECT_TIME_COLLECTION_CELL_IDENTIFIER) 
     select_time_collection_view.tag = 2 
     select_time_collection_view.dataSource = self 
     select_time_collection_view.delegate = self 
     select_time_collection_view.showsHorizontalScrollIndicator = false 
     select_time_collection_view.showsVerticalScrollIndicator = false 
     hideSelectTimeView() 

     add_customization_collection_view.registerNib(UINib(nibName: "AddCustomizationCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: PERSONALIZE_ADD_CUSTOMIZATION_COLLECTION_CELL_IDENTIFIER) 
     add_customization_collection_view.tag = 3 
     add_customization_collection_view.dataSource = self 
     add_customization_collection_view.delegate = self 
     add_customization_collection_view.showsHorizontalScrollIndicator = false 
     add_customization_collection_view.showsVerticalScrollIndicator = false 
     hideCustomizationsView() 

L'erreur se produit incohérente qui est une cause de préoccupation majeure . Comme je suis incapable de comprendre ce qui ne va pas et les journaux de crash d'iTunes ou Crashlytics n'aident pas.

+0

avez-vous placé la collection sur la vue d'ensemble avant de la remplir avec le contenu (données de rechargement)? – slava

+0

des vues de collection ont été définies dans le constructeur d'interface –

Répondre

3

J'ai finalement mis la main sur un iphone qui se bloquait. Il s'avère qu'il y a quelques problèmes:

Les rapports de crash d'iOS, Crashlytics et iTunes sont complètement inutiles. L'endroit où le code plantait n'était jamais marqué par eux mais était marqué par xcode quand il plantait en mode de débogage. Donc ne croyez pas sur les rapports générés par crashlytics ou itunes. Le vrai problème était que je reçois un temps du serveur au format 'HH: mm: ss', que je convertissais en format 'hh: mm a' puisque je voulais le AM, PM pour mon interface utilisateur. Maintenant, la grande chose faite par iOS est que si l'utilisateur a les paramètres de son téléphone dans le format 24 heures, il n'y aurait pas AM/PM retourné et l'application se bloque parce que je ne vérifiais pas la chaîne retournée est nulle. Pour résoudre le problème ci-dessus je devais définir les paramètres régionaux à:

df.locale = NSLocale(localeIdentifier: "en_US_POSIX") 

Le problème est enfin résolu. L'apprentissage principal est que ne dépendez pas de la crashlytics ou des rapports Itunes

+0

qu'est ce que 'df'? J'ai le même rapport d'accident. – Raesu

+0

df est une instance de NSDateFormatter que j'ai créée. –