Fabric中出现了以下堆栈跟踪:
我的问题:从崩溃日志中可以看出,'formatMessageAuthorName'函数是导致此EXC_BREAKPOINT崩溃的唯一原因吗?例如,除了此函数内部的代码之外,是否还有其他可能导致崩溃的原因?
这是我的formatMessageAuthorName函数:
private static func formatMessageAuthorName(firstname: String, lastname: String?=nil) -> String {
// Capitalise first character of firstname
var Cap_firstname = firstname
Cap_firstname.replaceRange(Cap_firstname.startIndex...Cap_firstname.startIndex, with: String(Cap_firstname[Cap_firstname.startIndex]).capitalizedString)
guard let lastname = lastname else { return Cap_firstname }
// if has lastname & first char, capitalise too and concat with firstname.
if let firstCharLastName = lastname.characters.first {
return "\(Cap_firstname) \(String(firstCharLastName).uppercaseString)."
} else {
return firstname
}
}
我的假设
我知道唯一可能导致函数崩溃的线索是当“firstname”是一个空字符串时,它会在这里崩溃,因为它访问了无效的数组索引:
String(Cap_firstname[Cap_firstname.startIndex])
然而,我仍对这个假设持怀疑态度,因为我相当确定“firstname”不为空(它是从服务器检索的)。我甚至通过登录一些出现了这个崩溃的用户账户并使用该页面(MessageViewController)进行测试,但我从未遇到过这个崩溃,而且名字也显示正确。这似乎与iOS版本无关,因为我从iOS 8、9和10收到了崩溃报告。
我的应用最近更新后经常出现这个崩溃(>300次),我不知道原因,因为之前从未发生过,这里的代码在更新中没有改变,而且我无法复现受影响用户的情况。
如果罪魁祸首只能是此函数中的代码,而没有其他可能性(如多线程、Realm等),我可以将重点转向服务器问题,例如“firstname”可能是一个空字符串。但仍然无法想象发生这种情况的原因,因为我已经使用这些用户账户,而且从未遇到过这个崩溃。
非常感谢。