在哪里只更新一次通知小部件的 UI
Where to update the UI of a notification widget just once
今天在我的通知中心 Extension/Widget 每次激活通知中心时,我都需要更新 UI 的一部分。它永远不需要在使用通知中心时更新,也不需要在后台更新。我应该在什么方法中放置该代码?
viewDidLoad
和 viewWillAppear
每次显示时都会被调用,例如,如果您向上和向下滚动,它们将再次被调用,所以这太频繁了。
widgetPerformUpdateWithCompletionHandler
在第一次显示之前根本不会被调用(至少在 iOS 8.2 beta 中),并且每当 iOS 感觉喜欢它更新 UI 即使它在后台也不合适。
loadView
仅调用一次,除非从内存中删除小部件,否则永远不会再次调用。因此,如果您打开通知中心并查看小部件,然后关闭通知中心并稍后重新打开它,它可能不会再次调用该方法,具体取决于它是否已从内存中清除。
我只会使用 viewDidLoad
而不必担心多次调用的可能性。除非该方法需要很长时间才能 运行,否则没有理由不这样做。 [如果它 确实 需要很长时间才能 运行,你今天的扩展会很糟糕,所以修复它。]
如果出于某种原因您只希望它发生一次,请将 BOOL
ivar 添加到 class。在 initWithCoder:
中将其设置为 YES
然后在 viewDidLoad
中检查该值。如果它是 YES
,请进行更新并将值设置为 NO
。如果已经 NO
,请跳过更新。
今天在我的通知中心 Extension/Widget 每次激活通知中心时,我都需要更新 UI 的一部分。它永远不需要在使用通知中心时更新,也不需要在后台更新。我应该在什么方法中放置该代码?
viewDidLoad
和 viewWillAppear
每次显示时都会被调用,例如,如果您向上和向下滚动,它们将再次被调用,所以这太频繁了。
widgetPerformUpdateWithCompletionHandler
在第一次显示之前根本不会被调用(至少在 iOS 8.2 beta 中),并且每当 iOS 感觉喜欢它更新 UI 即使它在后台也不合适。
loadView
仅调用一次,除非从内存中删除小部件,否则永远不会再次调用。因此,如果您打开通知中心并查看小部件,然后关闭通知中心并稍后重新打开它,它可能不会再次调用该方法,具体取决于它是否已从内存中清除。
我只会使用 viewDidLoad
而不必担心多次调用的可能性。除非该方法需要很长时间才能 运行,否则没有理由不这样做。 [如果它 确实 需要很长时间才能 运行,你今天的扩展会很糟糕,所以修复它。]
如果出于某种原因您只希望它发生一次,请将 BOOL
ivar 添加到 class。在 initWithCoder:
中将其设置为 YES
然后在 viewDidLoad
中检查该值。如果它是 YES
,请进行更新并将值设置为 NO
。如果已经 NO
,请跳过更新。