【发布时间】:2017-07-15 01:19:47
【问题描述】:
我在 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 等),我可以转而关注服务器问题,比如“名字”可能是空的细绳。但是,我仍然无法想象它是如何发生的,因为我已经使用了这些用户帐户并且我自己从未遇到过这种崩溃。
非常感谢。
【问题讨论】:
-
这里也一样,不知道怎么回事?
-
@aunnn,您是否设法找出问题所在
-
@FredFlinstone 嗨,弗雷德。不幸的是,我从来不知道出了什么问题。
-
@aunnn 好吧,太糟糕了。感谢您回复我
标签: ios swift debugging crashlytics