2017-08-16 2 views
0

J'ai intégré crashlytics dans mon application iOS. Et j'ai eu un journal de panne comme ceciComprendre un crashlog de Fabrics

# Issue #: 1 
# Issue ID: 59940bb4be077a4dcc2837ff 
# Session ID: 
e68dd53b640d4ac39f21b511a9f78b78_90910b25826211e7a25d56847afe9799_0_v2 
# Date: 2017-08-16T06:30:00Z 
# OS Version: 10.3.3 (14G60) 
# Device: iPhone 6s 
# RAM Free: 3.8% 
# Disk Free: 15.2% 

#0. Crashed: com.apple.main-thread 
0 MY APP       0x100086b50 specialized static Functions.retunDateStringFromDateString(dateString : String, inuputFormat : String, outPutFormat : String) -> String (Functions.swift:123) 
1 MY APP       0x1000ef820 specialized TeamAttendanceViewController.tableView(UITableView, cellForRowAt : IndexPath) -> UITableViewCell (Functions.swift) 
2 MY APP       0x1000eaa78 @objc TeamAttendanceViewController.tableView(UITableView, cellForRowAt : IndexPath) -> UITableViewCell (TeamAttendanceViewController.swift) 
3 UIKit       0x193641d90 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 688 
4 UIKit       0x193641fa8 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 80 
5 UIKit       0x19362f6ac -[UITableView _updateVisibleCellsNow:isRecursive:] + 2152 
6 UIKit       0x193646f98 -[UITableView _performWithCachedTraitCollection:] + 120 
7 UIKit       0x1933df49c -[UITableView layoutSubviews] + 176 
8 UIKit       0x1932f9cc0 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1200 
9 QuartzCore      0x1904ea274 -[CALayer layoutSublayers] + 148 
10 QuartzCore      0x1904dede8 
CA::Layer::layout_if_needed(CA::Transaction*) + 292 
11 QuartzCore      0x1904deca8 
CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32 
12 QuartzCore      0x19045a34c 
CA::Context::commit_transaction(CA::Transaction*) + 252 
13 QuartzCore      0x1904813ac 
CA::Transaction::commit() + 504 
14 QuartzCore      0x190481e78 
CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned 
long, void*) + 120 
15 CoreFoundation     0x18d1789a8 
__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 
16 CoreFoundation     0x18d176630 __CFRunLoopDoObservers 
+ 372 
17 CoreFoundation     0x18d176a7c __CFRunLoopRun + 956 
18 CoreFoundation     0x18d0a6da4 CFRunLoopRunSpecific + 
424 
19 GraphicsServices    0x18eb11074 GSEventRunModal + 100 
20 UIKit       0x193361c9c UIApplicationMain + 208 
21 MY APP       0x10002f710 main 
(AppDelegate.swift:16) 
22 libdyld.dylib     0x18c0b559c start + 4 

c'est la première fois que je vais lire un fichier journal de plantage. Tel que je le comprend. Il y a quelque chose qui ne va pas avec ma ligne Function de la classe 123 de la classe returnDateString. Mais comment puis-je comprendre quel est le problème exact dans cette ligne? Et ceci est ma méthode dans la classe Function.

class func retunDateStringFromDateString(dateString : String,inuputFormat: String, outPutFormat : String) -> String{ 
    if(dateString != ""){ 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = inuputFormat//this your string date format 

     let date = dateFormatter.date(from: dateString) 


     dateFormatter.dateFormat = outPutFormat///this is what you want to convert format 

     let timeStamp = dateFormatter.string(from: date!) 


     return timeStamp 
    }else{ 
     return "" 
    } 

} 

Et c'est ma ligne 123. let timeStamp = dateFormatter.string(from: date!)

Quelle serait la raison pour cela? S'il vous plaît aidez-moi. Merci

MISE À JOUR

var inTimeArray = inTime?.components(separatedBy: ".") 
print(inTimeArray) 

cell.inOneTime.text = Functions.nullToNilForString(value: Functions.retunDateStringFromDateString(dateString: (inTimeArray?[0])! ,inuputFormat: "yyyy-MM-dd'T'HH:mm:ss", outPutFormat: "HH:mm") as AnyObject?)?.description 
+1

Copie possible de [DateFormatter ne renvoie pas la date de "HH: mm: ss"] (https://stackoverflow.com/questions/40692378/dateformatter-doesnt-return-date-for-hhmmss) – the4kman

+1

probablement "nil" dans 'date'. Quelle est votre 'inputFormat' et qu'est ce que' dateString'? N'utilisez pas non plus de déballage de force à moins d'être à 100% la valeur ne sera jamais nulle. En ce qui concerne la compréhension du crashlog, les journaux de plantage ne montrent qu'une trace de pile, ils ne peuvent pas vous indiquer la cause exacte du problème, car en mode release, votre application ne fonctionne pas dans le débogueur et aucun point d'arrêt ne peut être détecté. . Cependant, comme vous l'avez fait ici, vous pouvez localiser l'erreur sur la ligne la provoquant dans la plupart des cas. –

+0

@ DávidPásztor J'ai mis à jour ma question avec la ligne d'appel – user1960169

Répondre

2

Sur la base de la discussion dans les commentaires, il semble que les paramètres régionaux sont différents sur de votre utilisateur périphérique que sur vos périphériques de test et les différentes locales peuvent causer des problèmes lors de l'utilisation de formats de date explicites.

Comme je l'ai déjà indiqué dans les commentaires, ne forcez pas le déballage de la valeur de date, utilisez plutôt le déballage facultatif et affichez un message d'erreur à l'utilisateur si dateFormatter.date(from: String) échoue.

Vous devez modifier votre dateFormat en un format indépendant des paramètres régionaux ou définir dateFormatter.locale = Locale(identifier: "en_US_POSIX") ou tout autre environnement local avec lequel vous avez testé vos formats de date explicites. Pour comprendre le fichier crash, les journaux de plantage ne montrent qu'une trace de pile, ils ne peuvent pas vous indiquer la cause exacte du problème, car en mode release, votre application ne fonctionne pas dans le débogueur et il ne peut y avoir aucun point d'arrêt. identifier une exception d'exécution. Cependant, comme vous l'avez fait ici, vous pouvez localiser l'erreur sur la ligne la provoquant dans la plupart des cas.

+0

Merci beaucoup. Si je définis dateFormatter.locale = Locale (Identifiant: "en_US_POSIX") cela fonctionnera-t-il pour tous les autres paramètres régionaux de n'importe quel appareil? – user1960169

+1

Cela dépend de l'origine de votre 'dateString'. S'il s'agit d'une valeur indépendante du périphérique, alors oui, la définition des paramètres régionaux sur US fonctionnera sur chaque périphérique indépendamment des paramètres régionaux. –

+0

Y a-t-il un moyen de semulate ce même problème dans mon appareil? – user1960169

1

Le problème le plus probable est que vous êtes la force déballant votre paramètre de date en option. Si elle ne peut pas analyser dateString en premier lieu, la date sera nulle et le déballage de force provoquera un plantage.

Essayez quelque chose comme ceci:

guard let date = dateFormatter.date(from: dateString) else { 
    // handle the error 
    return "" 
} 
//... 
return dateFormatter.string(from: date) 

Voir la documentation sur optionals pour obtenir une meilleure compréhension https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html