草庐IT

swift - 每次打开时刷新今日小部件

coder 2023-07-16 原文

我以为每次打开 Today View 时它都会调用“viewWillAppear”,但事实并非如此。当我在我的应用程序中更改某些内容,然后向下滑动以查看 Today View 时,它有时会刷新 View ,有时不会。

我在 viewWillAppear 中执行所有逻辑(从 coreData 获取数据并将该数据放入标签),但它并不是每次都被调用。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    fetchContent()
    setLabels()
    setContentHeight()
    tableView.reloadData()
    print("view will appear")
}

如何在用户每次打开 Today Extensions 时调用 fetchContent 和 setLabels?

最佳答案

为此,您应该使用 NSWidgetProvindingwidgetPerformUpdateWithCompletionHandler

步骤:

1.- 确保您的 UIViewController 实现了 NCWidgetProviding

class MainViewController: UIViewController, NCWidgetProviding

2.- 添加以下函数:

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
        // Perform any setup necessary in order to update the view.

        // If an error is encountered, use NCUpdateResult.Failed
        // If there's no update required, use NCUpdateResult.NoData
        // If there's an update, use NCUpdateResult.NewData

        completionHandler(NCUpdateResult.NewData)
    }

3.- 在您的情况下,您将使用 .NewData

只需确保您检索到所需的数据并刷新您的 View (将所有数据放置到位,填充标签、图表等)。

没关系,在调用此函数期间您的 View 不可见,iOS 将填充 View 并为其拍摄快照。

这就是您打开通知中心时显示的内容,直到您再次获得对应用的控制权。

So, in your case would be something like this:

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
        fetchContent()
        setLabels()
        setContentHeight()
        tableView.reloadData()

        completionHandler(NCUpdateResult.NewData)
    }

关于swift - 每次打开时刷新今日小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34929954/

有关swift - 每次打开时刷新今日小部件的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby - 有没有办法将 html 刷新到 Sinatra 中的线路 - 2

    我有一个Sinatra应用程序,它有一个长时间运行的进程(网络抓取工具)。我希望应用程序在爬虫运行时而不是在结束时刷新爬虫进度的结果。我已经考虑过fork请求并使用ajax做一些有趣的事情,但这是一个非常基本的单页应用程序,实际上只需要在它发生时将日志输出到浏览器。有什么建议吗? 最佳答案 更新(2012-03-21)从Sinatra1.3.0开始,您可以使用新的流式API:get'/'dostreamdo|out|out旧答案不幸的是,您没有可以简单地刷新到的流(这不适用于Rack中间件)。从路由block返回的结果可以简单地响应

  3. ruby-on-rails - AuthLogic perishable_token 在每次请求时重置 - 2

    在我的用户模型中我有:acts_as_authenticdo|c|c.perishable_token_valid_for=30.minutesend在我的应用程序Controller中,我有标准样板代码:defcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefined?(@current_user)@current_u

  4. ruby - 延迟作业每次引发错误时都会创建空气制动器 - 2

    defperformrefund_log={success:refund_retry.success?,amount:refund_amount,action:"refund"}ifrefund_retry.success?refund_log[:reference]=refund_retry.transaction.idrefund_log[:message]=refund_retry.transaction.statuselserefund_log[:message]=refund_retry.messagerefund_log[:params]={}refund_retry.er

  5. ruby-on-rails - 每次请求都会重新加载模块,因此初始化数据会丢失 - 2

    我将值存储在模块内的类变量中,例如:moduleTranslationEnhancerdefself.install!klass@dictionaries||=[]我从config/initializers中的初始化程序中调用它:requireRails.root+"lib"+"translation_enhancer.rb"TranslationEnhancer::install!TranslationDictionary现在,如果我在开发环境中启动服务器,在第一个请求期间一切正常。然而,在那个请求之后,@dictionaries突然变成了nil。我已经注释了TranslationE

  6. ruby - ruby 中的 .each 迭代器是否保证每次都对相同的元素给出相同的顺序? - 2

    我正在用列表“a”做这样的事情:a.each_with_index|outer,i|a.each_with_index|inner,j|if(j>i)#dosomeoperationwithouterandinnerendendend如果迭代器不打算使用相同的顺序,这将不起作用。我不关心实际顺序是什么,我只需要两个.each_with_index迭代器使用相同的顺序。我假设它是一个数组的一个属性,它有一个固定的顺序,我只是偏执地认为迭代器不会使用那个顺序...... 最佳答案 这取决于您正在操作的特定Enumerable对象。例如,

  7. ruby - 每次请求都会启动一个新的 sinatra 实例吗? - 2

    当一个新的http请求进来时,是否会启动一个新的sinatra实例,例如是否要初始化sinatra,或者只是调用sinatra的前一个实例(相应的get/post方法/路由)的方法?感谢您提供任何文档链接,我找不到任何文档链接。如果该行为依赖于部署类型——WEBrick/Passenger等,那也很有趣 最佳答案 为每个请求创建一个新类。然而,这不是Rack完成的。这是Sinatra的一个特性。如果您想深入了解细节:该实例实际上不是使用Sinatra::Application.new创建的,而是使用Sinatra::Applicat

  8. ruby-on-rails - 如何使用 Turbolinks 刷新页面 - 2

    我知道我可以在Turbolinks5上调用以下代码但它改变了滚动位置。有没有办法调用Turbolinks来刷新页面而不改变滚动位置?Turbolinks.visit(location.toString());这会做我想做的,但希望使用Turbolinkswindow.location.reload() 最佳答案 在调用visit之前存储当前滚动位置,然后在页面加载时滚动到该存储位置。将存储的滚动位置重置为null可确保后续页面加载不会滚动到旧位置。一种可能的实现可能是:varreloadWithTurbolinks=(functio

  9. ruby-on-rails - 为什么一个空的 Rails 进程每次启动时都会有不同的内存占用? - 2

    我们一直在努力找出如何通过识别内存消耗大的gem并寻找替代方案或解决方案来减少我们的Rails应用程序的启动内存占用量。但在OSX上有一种行为令我感到莫名其妙。使用全新生成的Rails应用程序(railsnewmemoryusage),没有Gemfile,没有模型,没有数据,也没有事务,启动railsc时内存每次启动时,对应的ruby​​进程的OSX显示都会有所不同,从低至60MB到高至65MB,没有明显的模式说明为什么同一个应用程序每次执行可能需要更少或更多的内存。我想这在某种程度上与Ruby分配内存的方式有关,但我不完全清楚为什么对于相同的代码且没有变量处理,它的内存分配会变化如此

  10. ruby-on-rails - RSpec:在每个上下文之后刷新表/销毁对象 - 2

    你如何删除你创建的对象(在数据库和内存中)每次测试后AND在每个上下文之后?(在某种情况下,相互构建测试可能是有意义的)是否有自动执行此操作的方法?我有以下问题:每个测试都会将条目保存到数据库中。下一个测试则取决于这些条目。即使我想构建依赖于其他测试的测试,我也做不到,因为测试的执行顺序是不可控的。工厂.rb:sequence(:name){|n|"purchaser#{n}"}organization_spec.rb:context"whennosupplierexists"doit"findsnoassociatedsuppliers"dopurchaser=create(:org

随机推荐