iOS 9 Today Widget没有调用viewDidLoad

时间:2015-08-31 20:10:20

标签: ios xcode ios9 ios8-today-widget today-extension

将今日小部件添加到今日视图时,它会正确绘制。但是,如果您的用户稍后再回来,则不会调用viewDidLoad函数,而是显示过时的数据。应该每次调用viewDidLoad吗?是否有iOS 9 / Xcode 7 beta 6错误?

编辑: 添加了未调用的widgetPerformUpdateWithCompletionHandler。我有断点设置和打印功能

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
    print("in widgetPerformUpdateWithCompletionHandler")
    fetch()

    completionHandler(NCUpdateResult.NewData)
}

2 个答案:

答案 0 :(得分:5)

当您在屏幕上滚动窗口小部件时,相同的控制器实例将在短时间内重复使用(在我的测试中似乎是~30秒),viewDidLoad和{{1}不会被调用。

但是,每次显示小部件时都会调用widgetPerformUpdateWithCompletionHandler:viewWillAppear

答案 1 :(得分:0)

发表我自己的答案,但想讨论这段代码 - 它应该在那里或如何正确地做到这一点?我们在这种方法中,通过删除它,小部件开始正常工作

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
{

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

    if let safeCoordinator = coordinator as UIViewControllerTransitionCoordinator?
    {
        print("coordinator != nil")
        safeCoordinator.animateAlongsideTransition({ context in
            self.tableView.frame = CGRectMake(0, 0, size.width, size.height)
            }, completion: nil)

    }
    else
    {
        print("coordinator == nil")
    }
}