gpt4 book ai didi

ios - 显示今天 View 小部件内容的正确方法

转载 作者:行者123 更新时间:2023-12-02 03:03:30 25 4
gpt4 key购买 nike

我正在开发一个今日 View 扩展,其中包含一些我没有在界面生成器中设置的自定义 View 元素。

现在我想知道生命周期中正确的点是初始化小部件内容。

我读到了关于更新 widgetPerformUpdateWithCompletionHandler 中的内容,因此我实现了对应该与 View 相关的新更新的检查。

但我的观察表明该方法是在 viewDidAppear 之前调用的,因此没有要更新的 View 。另外,我认为小部件会在内存中保留一段时间,以便我可以在 widgetPerformUpdateWithCompletionHandler 中拥有某个对象,我可以在 viewDidAppear 中更新和使用其内容,但这不是案例(每次都会加载)

那么正确的方法是什么:在 widgetPerformUpdateWithCompletionHandler 中将内容写入磁盘,我可以依赖内存中的内容还是只是忽略并在每次加载时刷新?

最佳答案

TodayViewController.m 中,每次打开通知时都会调用 -viewDidLoad() 方法。因此,当您检查“今日”小部件时,它会调用 -viewDidLoad()。因此,您可以在 -viewDidLoad() 中进行自定义。除非您不想检查以前的状态。

直接来自博客,该博客帮助使用实时数据创建“今日”小部件:

Creating today widget

Caching We can take advantage of NSUserDefaults to save the calculated used space between launches. The lifecycle of a widget is short so if we cache this value, we can set up the user interface with an initial value and then calculate the actual value.

编辑:

来自Apple documentation它指出

To help your widget look up to date, the system occasionally captures snapshots of your widget’s view. When the widget becomes visible again, the most recent snapshot is displayed until the system replaces it with a live version of the view.

这也是状态,从通知中心,我们可以获取状态和快照的小部件详细信息。

对此不确定,但它指出小部件和包含应用程序都使用以下方法来检查其内容。关于如何获取小部件快照没有太多细节。

  func setHasContent(_ flag: Bool,
forWidgetWithBundleIdentifier bundleID: String!)

NCWidgetController setHasContent

编辑 2:在扩展中使用 NSUserDefaults:

  1. 您有两个 .entitlements 文件,一个用于主机应用,第二个用于扩展应用,请在这两个文件中添加以下 key

    <key>com.apple.security.application-groups</key>
    <array>
    <string>group.YourExtension</string>
    </array>
  2. 您看到键的值为 group.YourExtension 它是共享的主机应用程序和扩展应用程序的通用 key

  3. 使用 NSUserDefaults 中的 group.YourExtension 保存数据

关于ios - 显示今天 View 小部件内容的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com