Apple Watch - 更新背景概览
Apple Watch - update glance on background
我正在开发 AppleWatch 应用程序,我想知道是否可以在后台更新 glance。当用户打开 glance 时,我希望 glance 立即更新,而不是等到 glance 从服务接收更新信息并呈现它。
目前我正在使用这个功能来更新glance,但是这会显示更新的信息不会立即。
- (void)awakeWithContext:(id)context // This function can't spend too much time processing the data otherwise we will se a black background. Can't call the service here.
{
//Configure the interface using the cached info.
[super awakeWithContext:context];
}
- (void)willActivate
{
//Configure the interface using the service
[super willActivate];
}
有什么想法吗?
提前致谢。
您可以在 iOS 应用程序中安排后台提取,并在提取之后将数据保存到共享组容器。
然后在 glance 控制器的 awakeWithContext 方法中,您可以从该共享组容器中获取数据。它应该足够快。
第一次出现 glance 时,您可以在 init
中向用户提供通用的欢迎消息。然后,在 willActivate
(或者,我想,awakeWithContext:
)填充您的控件并启动计时器以定期抓取更新的内容以供浏览。
正如 Ivp 所建议的,您应该将更新后的数据存储在共享容器中。 (看看NSUserDefaults:initWithSuiteName:)
如果您知道您的 iPhone 应用程序将在您的 glance 启动之前启动,您可以跳过通用的欢迎消息,而只依赖它在共享容器中播种数据。
这是我上面描述的示例,但它没有显示共享容器中的数据存储。
- (instancetype)init {
self = [super init];
if (self) {
if (isFirstLaunch) {
self.displayInfo = [self createWelcomeInfo];
}
}
return self;
}
- (void)willActivate {
[super willActivate];
// refreshUI will check for new data, request more for next time,
// and then configure the display labels with the new data.
[self refreshUI];
// Setup a timer to refresh the glance based on new trends provided by the phone app.
// NOTE: This timer is never invalidated because didDeactivate seems to never be called.
// If, by chance, willActivate is called more than once, we may end up with multiple repeating timers.
self.refreshTimer = [NSTimer scheduledTimerWithTimeInterval:kTimeIntervalRefresh
target:self
selector:@selector(refreshUI)
userInfo:nil
repeats:YES];
}
- (void)refreshUI {
if (! isFirstLaunch ) {
if (self.nextDisplayInfo) {
self.displayInfo = self.nextDisplayInfo;
}
// requestMoreInfo will populate self.nextDisplayInfo asynchronously,
// so it's ready for the next time you are in refreshUI
[self requestMoreInfo];
}
[self configureLabels:self.displayInfo];
// Setup for when the user taps the glance
[self updateUserActivity:@"com.example.AppName" userInfo:@{@"data": self.displayInfo} webpageURL:nil];
}
我正在开发 AppleWatch 应用程序,我想知道是否可以在后台更新 glance。当用户打开 glance 时,我希望 glance 立即更新,而不是等到 glance 从服务接收更新信息并呈现它。
目前我正在使用这个功能来更新glance,但是这会显示更新的信息不会立即。
- (void)awakeWithContext:(id)context // This function can't spend too much time processing the data otherwise we will se a black background. Can't call the service here.
{
//Configure the interface using the cached info.
[super awakeWithContext:context];
}
- (void)willActivate
{
//Configure the interface using the service
[super willActivate];
}
有什么想法吗?
提前致谢。
您可以在 iOS 应用程序中安排后台提取,并在提取之后将数据保存到共享组容器。 然后在 glance 控制器的 awakeWithContext 方法中,您可以从该共享组容器中获取数据。它应该足够快。
第一次出现 glance 时,您可以在 init
中向用户提供通用的欢迎消息。然后,在 willActivate
(或者,我想,awakeWithContext:
)填充您的控件并启动计时器以定期抓取更新的内容以供浏览。
正如 Ivp 所建议的,您应该将更新后的数据存储在共享容器中。 (看看NSUserDefaults:initWithSuiteName:)
如果您知道您的 iPhone 应用程序将在您的 glance 启动之前启动,您可以跳过通用的欢迎消息,而只依赖它在共享容器中播种数据。
这是我上面描述的示例,但它没有显示共享容器中的数据存储。
- (instancetype)init {
self = [super init];
if (self) {
if (isFirstLaunch) {
self.displayInfo = [self createWelcomeInfo];
}
}
return self;
}
- (void)willActivate {
[super willActivate];
// refreshUI will check for new data, request more for next time,
// and then configure the display labels with the new data.
[self refreshUI];
// Setup a timer to refresh the glance based on new trends provided by the phone app.
// NOTE: This timer is never invalidated because didDeactivate seems to never be called.
// If, by chance, willActivate is called more than once, we may end up with multiple repeating timers.
self.refreshTimer = [NSTimer scheduledTimerWithTimeInterval:kTimeIntervalRefresh
target:self
selector:@selector(refreshUI)
userInfo:nil
repeats:YES];
}
- (void)refreshUI {
if (! isFirstLaunch ) {
if (self.nextDisplayInfo) {
self.displayInfo = self.nextDisplayInfo;
}
// requestMoreInfo will populate self.nextDisplayInfo asynchronously,
// so it's ready for the next time you are in refreshUI
[self requestMoreInfo];
}
[self configureLabels:self.displayInfo];
// Setup for when the user taps the glance
[self updateUserActivity:@"com.example.AppName" userInfo:@{@"data": self.displayInfo} webpageURL:nil];
}