我有一个今天的小部件,其中包含两件事:
UILabel
UITableView
在viewWillAppear
中,将标签设置为可见,将tableView设置为隐藏,并将标签文本设置为“正在加载”。参见下图。
然后我得到一个位置,完成后,我调用另一个方法,然后
成功完成后,我的tableView看起来像这样:
。
[现在解决我的问题。当我打开今天的窗口小部件并单击viewWillAppear
时,我并不总是设法设置标签,唯一得到的结果是这个
。
所以发生的是,我只能在tableView中显示以前的结果。
这种情况偶尔会发生,似乎tableView冻结了,我无法更新初始视图,而是隐藏tableView并显示标签。即使屏幕像这样死机,一切也都应按预期运行,而且我设法更新了tableView和视图。
唯一的问题是,当我打开屏幕冻结的窗口小部件时,如下所示:
有时不显示我的标签。之所以如此,是因为我设置了preferredContentSize = CGSizeMake(0, 30)
。否则,我敢打赌它将显示整个先前的tableView。
关于如何解决这个问题的任何想法,当我按下viewWillAppear
时总是更新视图?
更新开始另一个赏金,以查看是否对此问题还有其他意见。
[系统要做的是它需要快照。我也一直在为这个问题苦苦挣扎,并且检查了this帖子,但它没有解决我的问题。
widgetPerformUpdateWithCompletionHandler
有三个选项
NCUpdateResultNewData
-新内容需要您重新绘制视图NCUpdateResultNoData
-小部件不需要更新NCUpdateResultFailed
-更新过程中发生错误不管是哪一个,它总是相同的结果。 并且系统确实拍摄了快照。
为了帮助您的小部件保持最新状态,系统偶尔会捕获小部件视图的快照。当小部件可见时再次显示最新快照,直到系统更换为止它带有视图的实时版本。
要在拍摄快照之前更新小部件的状态,请确保符合NCWidgetProviding协议。当您的小部件收到widgetPerformUpdateWithCompletionHandler:调用,更新您的小部件的包含最新内容的视图,并调用补全处理程序,使用以下常量之一描述结果更新]]
我认为我们可能正在尝试加载“大量”数据,因此可能会发生这种情况。这是我的答案,但我开始悬赏以检查其他人是否有其他答案或您是否同意我的帖子。
您可以将操作放在viewdidload()
中,因为在您输入小部件时将调用viewdidload()
。