正确显示今天视图小部件内容的方式
我正在使用一些自定义视图元素处理今天的视图扩展,我没有在界面构建器中设置它们。
现在我想知道生命周期中正确的点是初始化小部件内容。
我读到了有关更新widgetPerformUpdateWithCompletionHandler
的内容的内容,因此我实现了对应该关于视图的新更新的检查。
但我的观察结果表明,该方法在viewDidAppear
之前被调用,因此没有更新的视图。 此外,我试图将小部件保留在内存中一段时间,以便我可以在widgetPerformUpdateWithCompletionHandler
拥有一个特定的对象,其内容我可以在viewDidAppear
更新和使用,但事实并非如此(每次都加载)
那么正确的方法是什么:在widgetPerformUpdateWithCompletionHandler
内容写入磁盘,我可以依赖于内存中的内容,还是只是忽略并刷新每次加载?
在每次打开通知时调用TodayViewController.m
-viewDidLoad()
方法。 因此,当您检查Today小部件时,它将调用-viewDidLoad()
。 所以你在-viewDidLoad()
自定义。 除非你不想检查以前的状态。
直接来自博客,帮助创建具有实时数据的今日小部件:
创建今天小部件
缓存我们可以利用NSUserDefaults来保存启动之间计算的已用空间。 窗口小部件的生命周期很短,因此如果我们缓存此值,我们可以使用初始值设置用户界面,然后计算实际值。
编辑:
从Apple文档中可以看出这一点
为了帮助您的窗口小部件查看最新版本,系统偶尔会捕获窗口小部件视图的快照。 当窗口小部件再次可见时,将显示最新的快照,直到系统将其替换为视图的实时版本。
从通知中心,我们也可以获得状态和快照的小部件细节。
不确定这一点,但它声明下面的方法被小部件和包含应用程序用于检查其内容。 关于如何获取小部件快照没有太多细节。
func setHasContent(_ flag: Bool, forWidgetWithBundleIdentifier bundleID: String!)
NCWidgetController setHasContent
编辑2:在扩展中使用NSUserDefaults:
-
您有两个
.entitlements
文件,一个用于主机应用程序,第二个用于扩展应用程序,在两个文件中添加以下键com.apple.security.application-groups group.YourExtension -
您看到key的值是
group.YourExtension
它是主机应用和扩展应用的共享公钥 -
使用
group.YourExtension
中的NSUserDefaults
保存数据
- FBSDKLoginBehaviorSystemAccount无效
- 如何在iOS App Store沙盒中testing自动续订订阅的“续订”组件?
- 在UITextField的开头创build空格
- Firebase是否仍然支持Mac OS X – 2016年7月
- 如何从ipodlibrary获取歌曲,并使用AVPlayer播放
- Swift Alamofire发送XML请求并接收XML响应
- inputstring的validation是否为CivilID?
- Facebook的SLComposeViewController URL显示在正文中,如果URL和图像都存在
- iOS(Swift):具有可变高度的TableView节标题-适合内容