【问题标题】:ios simulator viewDidLoad, viewDidAppear not called after close or quitios模拟器viewDidLoad,关闭或退出后未调用viewDidAppear
【发布时间】:2017-02-08 11:31:00
【问题描述】:

我的应用有一个视图控制器和一个视图。当我从 xcode 在模拟器上运行我的应用程序时,应用程序会加载并且viewDidLoadviewDidAppear 都会按预期调用。

  1. 当我转到模拟器主屏幕然后返回应用程序时, 我希望viewDidLoad 会被调用,但事实并非如此。

  2. 当我退出 通过关注these directions 应用程序,然后重新启动应用程序,我 期望两个方法都被调用,但都没有被调用。

如果这些事件没有触发这些调用,那么什么会触发这些调用? 很难相信在真实设备上,viewDidLoad 只被调用一次——应用程序第一次加载。

【问题讨论】:

    标签: ios iphone swift ios-simulator lifecycle


    【解决方案1】:

    上面写着“加载”。它的字面意思是在加载(实例化)视图控制器时调用它。当视图出现时也会调用“出现”,就像你推送它或关闭它上面的其他视图控制器时一样。

    你想要的是注册以下通知

    static let UIApplicationWillEnterForeground: NSNotification.Name
    static let UIApplicationDidEnterBackground: NSNotification.Name
    static let UIApplicationDidBecomeActive: NSNotification.Name
    

    在您的视图控制器的 viewDidLoad() 中添加通知。

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.applicationDidBecomeActive), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
    

    然后当应用从后台再次激活时,将调用以下方法。

    func applicationDidBecomeActive() {
        // Update your view controller
    }
    

    案例 2:

    如果您按照说明退出应用程序,调试会话将终止,因此断点和日志不起作用。如果您退出应用并想要检查断点或日志,您需要在 Xcode 中再次点击运行。

    【讨论】:

    • 一旦我安装了一个应用程序,viewDidLoad 只会被调用一次?
    • 是的。它在实例化并加载所有属性时仅调用一次。
    • 如果我把手机关机再开机,然后打开应用viewDidLoad应该再调用一次?我赞成你的回答,因为它解释了案例 1,但我还没有选择它作为解决方案,因为我不理解案例 2 的证明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多