如果 Watch 应用在 iPhone 应用运行之前打开,则不会填充任何数据
If Watch app opens before iPhone app runs, no data is populated
我 运行 遇到一个问题,如果我 运行 我的应用程序在 iPhone 模拟器之前的手表模拟器中,则没有数据Watch 应用程序。
这是因为我从 iPhone 应用程序获取手表数据(我在其中查询 Parse
并将结果保存到手表可以访问的组默认值) ,因为据我所知,我们被告知无法在 Watch 应用程序(扩展)中 运行 这种功能。
我说错了吗?
如果 iPhone 应用还没有 运行,我应该如何在第一次 运行 时填充 Watch 应用?
iPhone TableViewController.m
:
- (void)viewDidLoad {
PFQuery *query = [self queryForTable];
// ... Query Parse to find data, then save it App Group...
NSString *container = @"group.com.me.off";
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];
// ... finish saving to App Group
}
观看“InterfaceController.m”:
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Initialize Parse.
[Parse setApplicationId:@"xxx"
clientKey:@"xxx"];
// GMT Date from Phone
NSDate *gmtNow = [NSDate date];
NSLog(@"GMT Now: %@", gmtNow);
// Query Parse
PFQuery *query = [PFQuery queryWithClassName:@"na"];
[query whereKey:@"dateGame" greaterThanOrEqualTo:gmtNow];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSMutableArray *localMatchup = [@[] mutableCopy];
for (PFObject *object in objects) {
// Add objects to local Arrays
[localMatchup addObject:[object objectForKey:@"matchup"]];
// App Group
NSString *container = @"group.com.me.off";
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];
// Matchup
[defaults setObject:localMatchup forKey:@"KeyMatchup"];
NSArray *savedMatchup = [defaults objectForKey:@"KeyMatchup"];
NSLog(@"Default Matchup: %@", savedMatchup);
savedMatchup = self.matchupArray;
}
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Say you went to dispatch");
});
}
}];
// App Group
NSString *container = @"group.com.me.off";
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];
// Matchup
NSArray *savedMatchup = [defaults objectForKey:@"KeyMatchup"];
self.matchupArray = savedMatchup;
}
- (void)willActivate {
[super willActivate];
// Hide "No Games" Label
if ([self.matchupArray count] > 0) {
self.noGamesLabel.hidden = YES;
self.rowTable.hidden = NO;
[self.rowTable setNumberOfRows:[self.matchupArray count] withRowType:@"rows"];
for (NSInteger index = 0; index < [self.timeArray count]; index++) {
// Matchup
NSString *matchupString = [self.matchupArray objectAtIndex:index];
RowController *controller = [self.rowTable rowControllerAtIndex:index];
[controller.matchupLabel setText:matchupString];
}
}
// Show "No Games" Label
else {
self.rowTable.hidden = YES;
self.noGamesLabel.hidden = NO;
}
}
您可以从您的扩展中查询 Parse,您可以写入组默认值。您的扩展可以像您的 iOS 应用一样发出 URL 请求。当查询为 运行 时,您需要小心不要阻塞主线程。您将需要一些初始 UI 来向用户显示您正在查询初始数据,以便应用程序看起来不会冻结。
我 运行 遇到一个问题,如果我 运行 我的应用程序在 iPhone 模拟器之前的手表模拟器中,则没有数据Watch 应用程序。
这是因为我从 iPhone 应用程序获取手表数据(我在其中查询 Parse
并将结果保存到手表可以访问的组默认值) ,因为据我所知,我们被告知无法在 Watch 应用程序(扩展)中 运行 这种功能。
我说错了吗?
如果 iPhone 应用还没有 运行,我应该如何在第一次 运行 时填充 Watch 应用?
iPhone TableViewController.m
:
- (void)viewDidLoad {
PFQuery *query = [self queryForTable];
// ... Query Parse to find data, then save it App Group...
NSString *container = @"group.com.me.off";
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];
// ... finish saving to App Group
}
观看“InterfaceController.m”:
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Initialize Parse.
[Parse setApplicationId:@"xxx"
clientKey:@"xxx"];
// GMT Date from Phone
NSDate *gmtNow = [NSDate date];
NSLog(@"GMT Now: %@", gmtNow);
// Query Parse
PFQuery *query = [PFQuery queryWithClassName:@"na"];
[query whereKey:@"dateGame" greaterThanOrEqualTo:gmtNow];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSMutableArray *localMatchup = [@[] mutableCopy];
for (PFObject *object in objects) {
// Add objects to local Arrays
[localMatchup addObject:[object objectForKey:@"matchup"]];
// App Group
NSString *container = @"group.com.me.off";
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];
// Matchup
[defaults setObject:localMatchup forKey:@"KeyMatchup"];
NSArray *savedMatchup = [defaults objectForKey:@"KeyMatchup"];
NSLog(@"Default Matchup: %@", savedMatchup);
savedMatchup = self.matchupArray;
}
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Say you went to dispatch");
});
}
}];
// App Group
NSString *container = @"group.com.me.off";
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];
// Matchup
NSArray *savedMatchup = [defaults objectForKey:@"KeyMatchup"];
self.matchupArray = savedMatchup;
}
- (void)willActivate {
[super willActivate];
// Hide "No Games" Label
if ([self.matchupArray count] > 0) {
self.noGamesLabel.hidden = YES;
self.rowTable.hidden = NO;
[self.rowTable setNumberOfRows:[self.matchupArray count] withRowType:@"rows"];
for (NSInteger index = 0; index < [self.timeArray count]; index++) {
// Matchup
NSString *matchupString = [self.matchupArray objectAtIndex:index];
RowController *controller = [self.rowTable rowControllerAtIndex:index];
[controller.matchupLabel setText:matchupString];
}
}
// Show "No Games" Label
else {
self.rowTable.hidden = YES;
self.noGamesLabel.hidden = NO;
}
}
您可以从您的扩展中查询 Parse,您可以写入组默认值。您的扩展可以像您的 iOS 应用一样发出 URL 请求。当查询为 运行 时,您需要小心不要阻塞主线程。您将需要一些初始 UI 来向用户显示您正在查询初始数据,以便应用程序看起来不会冻结。