如果在 iPhone 应用运行之前打开“监视”应用,则不会填充任何数据



我遇到了一个问题,如果我在 iPhone 模拟器之前在手表模拟器中运行我的应用程序,手表应用程序中没有数据。

这是因为我从iPhone应用程序获取手表数据(我在其中查询Parse并将结果保存到手表可以访问它的组默认值中),因为据我相信我们已经被告知没有办法在手表应用程序(扩展)中运行这种功能。

我说的错吗?

如果 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,也可以写入组默认值。 扩展可以发出 URL 请求,就像 iOS 应用一样。 您需要注意不要在查询运行时阻塞主线程。 你需要有一些初始 UI 来向用户显示你正在查询初始数据,以便应用看起来不会冻结。

最新更新