2016-05-17 2 views
1

Crashlytics дает мне следующий стек. Авария происходит непоследовательно. Случается на всех устройствах iOS 9, но очень редко. Не удалось выяснить источник проблемы. Не произошло ни на одном из устройств, которые у меня были, пытался сбой в течение последних 3 дней.Swift Specialized Crash on 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) 

код, где он выходит из строя является:

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 
    } 

настроит все представления коллекции в 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() 

ошибка происходит непоследовательно, которая является одной из основных причин для беспокойства , Поскольку я не могу понять, что не так, и журналы сбоев от itunes или Crashlytics не помогают.

+0

Вы разместили коллекцию на супервизии, прежде чем заполнять ее содержимым (перезагрузка данных)? – slava

+0

виды коллекций были определены в построителе интерфейса –

ответ

3

Я наконец получил свои руки на iphone, который рушился. Оказывается, есть пара проблем:

Отчеты о сбоях iOS, Crashlytics и iTunes абсолютно бесполезны. Фактическое место, где был сбой кода, никогда не было отмечено ими, но было отмечено xcode, когда он разбился в режиме отладки. Поэтому не верьте в отчеты, создаваемые краштиками или itunes.

Фактическая проблема заключалась в том, что я получаю время с сервера в формате «HH: mm: ss», который я преобразовывал в формат «hh: mm a», так как мне нужен AM, PM для моего интерфейса. Теперь самое замечательное, что делает iOS, заключается в том, что если пользователь имеет настройки времени своего телефона в 24-часовом формате, то AM/PM не будет возвращен, и приложение потерпит крах, потому что я не проверял, что возвращаемая строка равна нулю. Для решения вышеуказанной проблемы мне пришлось установить локаль:

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

Проблема окончательно решена. Основное обучение заключается в том, что не зависит от сообщений о катастрофах или Itunes.

+0

что такое 'df'? У меня такой же отчет о сбоях. – Raesu

+0

df - это экземпляр NSDateFormatter, который я создал. –

Смежные вопросы