了解 Fabrics 的崩溃日志
Understand a crashlog from Fabrics
我已将 crashlytics 集成到我的 iOS 应用程序中。我得到了这样的崩溃日志
# 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
这是我第一次阅读崩溃日志文件。我认为。我的 Function
class 的 returnDateString
方法的第 123 行有问题。但是我怎么能理解这一行的确切问题是什么?这是我在函数 class.
中的方法
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 ""
}
}
这是我的 123 行。
let timeStamp = dateFormatter.string(from: date!)
这是什么原因?
请帮我。
谢谢
更新
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
这里最有可能的问题是您强行解包了可选的日期参数。如果它不能首先将 dateString 解析为日期,则 date 将为 nil 并且强制解包将导致崩溃。
试试这样的方法:
guard let date = dateFormatter.date(from: dateString) else {
// handle the error
return ""
}
//...
return dateFormatter.string(from: date)
查看关于可选值的文档以更好地理解https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html
根据评论中的讨论,您的用户设备上的区域设置似乎与测试设备上的区域设置不同,不同的区域设置可能会在使用明确的日期格式时造成问题。
正如我在评论中所述,不要强制解包日期值,而是使用可选的解包并在 dateFormatter.date(from: String)
失败时向用户显示错误消息。
您应该将 dateFormat
更改为独立于语言环境的格式,或者设置 dateFormatter.locale = Locale(identifier: "en_US_POSIX")
或您测试过显式日期格式的任何其他语言环境。
至于理解崩溃日志,崩溃日志仅显示堆栈跟踪,它们无法告诉您问题的确切原因,因为在发布模式下,您的应用程序未 运行 在调试器中,因此可能存在没有断点来捕获和识别运行时异常。但是,正如您在此处所做的那样,在大多数情况下,您可以将错误查明到导致错误的那一行。
我已将 crashlytics 集成到我的 iOS 应用程序中。我得到了这样的崩溃日志
# 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
这是我第一次阅读崩溃日志文件。我认为。我的 Function
class 的 returnDateString
方法的第 123 行有问题。但是我怎么能理解这一行的确切问题是什么?这是我在函数 class.
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 ""
}
}
这是我的 123 行。
let timeStamp = dateFormatter.string(from: date!)
这是什么原因? 请帮我。 谢谢
更新
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
这里最有可能的问题是您强行解包了可选的日期参数。如果它不能首先将 dateString 解析为日期,则 date 将为 nil 并且强制解包将导致崩溃。
试试这样的方法:
guard let date = dateFormatter.date(from: dateString) else {
// handle the error
return ""
}
//...
return dateFormatter.string(from: date)
查看关于可选值的文档以更好地理解https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html
根据评论中的讨论,您的用户设备上的区域设置似乎与测试设备上的区域设置不同,不同的区域设置可能会在使用明确的日期格式时造成问题。
正如我在评论中所述,不要强制解包日期值,而是使用可选的解包并在 dateFormatter.date(from: String)
失败时向用户显示错误消息。
您应该将 dateFormat
更改为独立于语言环境的格式,或者设置 dateFormatter.locale = Locale(identifier: "en_US_POSIX")
或您测试过显式日期格式的任何其他语言环境。
至于理解崩溃日志,崩溃日志仅显示堆栈跟踪,它们无法告诉您问题的确切原因,因为在发布模式下,您的应用程序未 运行 在调试器中,因此可能存在没有断点来捕获和识别运行时异常。但是,正如您在此处所做的那样,在大多数情况下,您可以将错误查明到导致错误的那一行。