考虑以下代码:
@objc public func endAllSessionsWithReason(_ reason: Reason, completion completionBlock: (() -> Void)?) {
let allActiveSessions = self.activeSessions.map({$0.value})
for session in allActiveSessions {
if (reason != .undetermined) {
session.reason = reason
}
self.endSession(session, deleteSession: false)
}
let allActiveSessionIds = allActiveSessions.map({$0.sessionId})
self.deleteSessionsWithIds(sessionIds: allActiveSessionIds, completion: completionBlock)
}
Crashlytics在此代码中报告以下崩溃:
Crashed: com.apple.main-thread
EXC_BREAKPOINT 0x0000000103032788
SessionController.swift line 183
specialized SessionController.endAllSessionsWithReason(_:completion:)
第183行指的是:
let allActiveSessionIds = allActiveSessions.map({$0.sessionId})
几天以来,我一直在尝试找出可能导致此崩溃的原因,但一直无法复制。我在这里看不到任何隐式的拆包或可选内容,但是如果重要的话,sessionId
是会话对象中的非可选值。
self.activeSessions
也是一个非可选值,但可以为空。
我使用的是Swift 4.1,当运行各种不同版本的iOS 10、11和12的iOS设备上发生崩溃时,该应用程序确实支持某些iOS 9版本,但尚未报告(尽管可能无关紧要,因为该应用的iOS 9用户群很小( )。