我收到错误消息:
objc [12772]:无法形成对 appName.ViewController 类的实例 (0x137d65240) 的弱引用。该对象可能被过度释放,或者正在被释放。
我觉得这很奇怪,因为这只有在我添加了一个按钮单击以通过实例化将用户带到这个 UIViewController 之后才发生。再次运行应用程序后,错误消失了,因此仅当用户从按钮进入此 UIViewController 时才会发生这种情况。
有没有人知道是什么导致了这个问题?
@IBOutlet weak var time: UILabel!
@IBOutlet private weak var startPause: UIButton! {
didSet {
startPause.setBackgroundColor(.green, for: .normal)
startPause.setBackgroundColor(.yellow, for: .selected)
startPause.setTitle("PAUSE".uppercased(), for: .selected)
}
}
private lazy var stopwatch = Stopwatch(timeUpdated: { [weak self] timeInterval in // SIGNAL SIGABRT
guard let strongSelf = self else { return }
strongSelf.time.text = strongSelf.timeString(from: timeInterval)
})
deinit {
stopwatch.stop()
}
@IBAction func toggle(_ sendler: UIButton) {
sendler.isSelected = !sendler.isSelected
stopwatch.toggle()
}
@IBAction func reset(_ sendler: UIButton) {
stopwatch.stop()
startPause.isSelected = false
}
private func timeString(from timeInterval: TimeInterval) -> String {
let seconds = Int(timeInterval.truncatingRemainder(dividingBy: 60))
let minutes = Int(timeInterval.truncatingRemainder(dividingBy: 60 * 60) / 60)
let hours = Int(timeInterval / 3600)
return String(format: "%.2d:%.2d:%.2d", hours, minutes, seconds)
}
呈现视图控制器的代码:
class TutorialViewController: UIViewController {
@IBOutlet weak var doneTut: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func doneTut(_ sender: Any) {
let homeViewController = self.storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? HomeViewController
self.view.window?.rootViewController = homeViewController
self.view.window?.makeKeyAndVisible()
}
}