0

我收到错误消息:

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()
        
    }
    
}
4

1 回答 1

0

好的,我认为您呈现视图控制器的方式是有问题的。我会考虑使用UINatigationController,UITabController或您自己的带有视图控制器包含的容器视图控制器来处理演示文稿: https ://www.hackingwithswift.com/example-code/uikit/how-to-use-view-controller-containment

基本上,由于您正在重置窗口的根视图控制器,因此您的呈现视图控制器TutorialViewController可能会被释放(如果没有其他东西保留它)。

于 2021-08-28T17:17:08.887 回答