Today Extension view flashes when redrawing

前端 未结 2 758
甜味超标
甜味超标 2020-12-09 11:26

According to 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 ag

相关标签:
2条回答
  • 2020-12-09 12:08

    I had this same issue and finally figured out the issue I was having with my widget. It turns out it was related to a misunderstanding about the Widget Life Cycle on my behalf.

    From the documentation I thought that the today view would keep a 'snapshot' of my widgets state until the widgetPerformUpdateWithCompletionHandler method completion handler was called with success.

    This does not seem to be the case. From what I can see the 'snapshot' is just used when the Today View is animating in (when the user pulls down the notification centre). As soon as the today view is loaded and stationary your widget is loaded from scratch (inflated from xib if using) and viewDidLoad is called. At this moment you should populate you widget with cached data (not from a web request). If you don't you will see temporary data from your nib. This is what causes the flashing.

    When viewDidLoad is complete widgetPerformUpdateWithCompletionHandler is called which allows you to fetch fresh data. When the fresh data is fetched you should call the completion handler and cache the data it so it can be used when the widget is loaded later on from scratch (in viewDidLoad).

    A simple way to cache the data is in user defaults.

    0 讨论(0)
  • 2020-12-09 12:16

    You need to be careful about your compilation handler in the

    -(void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler

    method. What happens is that your extension probably has an error and everytime view appers it is being called again. Try to attach your extension to debugger(Debugger->Attach to Process-> your extension id) and see the result by putting some breakpoints.

    0 讨论(0)
提交回复
热议问题