问题描述
我无法理解收到的崩溃。我特别想知道 sender
是什么意思? didUpdate()
中的 Hardware Model: iphone11,2
Code Type: arm64
Parent Process: [1]
Date/Time: 2021-01-23T06:20:16.999Z
Launch Time: 2021-01-22T18:46:28Z
OS Version: iPhone OS 14.3 (18C66)
Exception Type: SIGTRAP
Exception Codes: TRAP_BRKPT at 0x100361d60
Crashed Thread: 0
Thread 0 Crashed:
0 App-Name 0x0000000100361d60 function signature specialization <Arg[0] = Dead> of App_Name.SessionViewController.didUpdate(_: App_Name.elapsedtimeSource,interval: Swift.Double) -> () (SessionViewController.swift:0)
1 App-Name 0x000000010065953c App_Name.elapsedtimeSource.(update in _B9C509359F1F9AD84C977E95030096FE)() -> () (elapsedtimeSource.swift:57)
2 App-Name 0x00000001006593d4 App_Name.elapsedtimeSource.start() -> () (elapsedtimeSource.swift:48)
3 App-Name 0x000000010036111c App_Name.SessionViewController.(displayInSession in _1C441B89ACF9824195FFFFDA0A95A40F)(App_Name.Session) -> () (SessionViewController.swift:112)
不知何故死了?
这是报告:
elapsedtimeSource
protocol elapsedtimeSourceDelegate: AnyObject {
func didUpdate(_ sender: elapsedtimeSource,interval: TimeInterval)
}
// Use on the main thread
class elapsedtimeSource {
var startDate: Date {
didSet {
if startDate != oldValue {
elapsed = Date().timeIntervalSince(startDate)
}
}
}
weak private var delegate: elapsedtimeSourceDelegate?
private var elapsed: TimeInterval = 0
private var isRunning = false
private let interval: TimeInterval
init(startDate: Date,delegate: elapsedtimeSourceDelegate,interval: TimeInterval = 1) {
self.startDate = startDate
self.delegate = delegate
self.interval = interval
}
func start() {
if isRunning { return }
isRunning = true
elapsed = Date().timeIntervalSince(startDate)
update() // *** Line 48 ***
}
func stop() {
isRunning = false
}
private func update() {
delegate?.didUpdate(self,interval: elapsed) // *** Line 57 ***
let actualElapsed = Date().timeIntervalSince(startDate)
let correction = elapsed - actualElapsed
dispatchQueue.main.asyncAfter(deadline: .Now() + interval + correction) { [weak self] in
guard let self = self else { return }
self.elapsed += self.interval
if self.isRunning {
self.update()
}
}
}
}
和完整的委托:
SessionViewController
以及 class SessionViewController: UIViewController {
private var elapsedtimeSource: elapsedtimeSource?
private func displayInSession(_ session: Session) {
if let elapsedtimeSource = elapsedtimeSource {
elapsedtimeSource.startDate = session.startTime
elapsedtimeSource.start()
} else {
elapsedtimeSource = elapsedtimeSource(startDate: session.startTime,delegate: self)
elapsedtimeSource?.start() // *** Line 112 ***
}
}
}
extension SessionViewController: elapsedtimeSourceDelegate {
func didUpdate(_ sender: elapsedtimeSource,interval: TimeInterval) {
let formatter = DateComponentsFormatter()
if interval < 3600 {
// Force showing minutes even when time is less than 1 min
formatter.allowedUnits = [.second,.minute]
} else {
formatter.allowedUnits = [.second,.minute,.hour]
}
formatter.zeroFormattingBehavior = .pad
let elapsed = formatter.string(from: interval) ?? ""
sessionelapsedtimeLabel.text = elapsed
}
}
的相关位:
{{1}}
我真的很感激任何学到的输入!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)