Today 扩展程序或 WatchKit 应用程序是否不赞成调用数据?

Is it frowned upon for Today extensions or WatchKit apps to call for data?

我正在修改我的应用程序,其中一件事是当我的应用程序处于后台时我无法获取最新数据。当我使用 Today 分机时,我也不能委托我的主应用程序为我打电话。

所以这似乎让我可以选择让我的扩展程序连接到服务器并对数据进行排序。因此,我必须为我的 WatchKit 应用程序做同样的事情。这是否令人不悦,如果是,是否有更好的解决方案?

所以在我的主视图控制器中我有这个方法:

- (void)loadTableData{
    if ([self.numberField.text isEqualToString:@""]) {
        tableViewController.busTimeArray = nil;
    }
    else{
        if([self.busNumber.text isEqualToString:@""]){
            TimeTableParser *timeParser = [[TimeTableParser alloc] initWithArray:tableViewController.busTimeArray];
            tableViewController.busTimeArray = [timeParser parseXML:self.numberField.text];
        }
        else{
            SortedTimeTableParser *timeParser = [[SortedTimeTableParser alloc] initWithArray:tableViewController.busTimeArray];
            tableViewController.busTimeArray = [timeParser parseXMLForStop:self.numberField.text andBusNumber:self.busNumber.text];
        }
    }

    //Shows the table
    [_busTimeTable reloadData];

    //Resign keyboard
    [self.view endEditing:true];

    [self passInformationToNCWidget];

    //Make sure the refresh circle is dismissed
    [_refreshController endRefreshing];
}

如您所见,我正在将信息传递给 Today Extension。这是通过 NSUserDefaults 完成的,并在 iOS 决定需要更新时在后台更新。在加载时,我的扩展程序读取 standardUserDefaults 并格式化要呈现给用户的数据。但是,我得到的反馈是,由于应用程序的性质(获取公交时间),用户希望获得更多最新数据。这是有道理的。所以我需要一种方法来获取扩展的最新数据。由于扩展不能直接调用应用程序控制器,我目前唯一的选择似乎是使用我拥有的排序方法(在单独的 class 中),它完成了大部分繁重的工作。

是否是 "frowned upon" 很难辨别,但我目前在 App Store 中有应用程序同时包含 Today 扩展和可进行网络调用的 WatchKit 应用程序。

这并不一定意味着这样做是正确的,因为您进行的每次网络调用都会降低用户体验,但根据我的经验,Apple 似乎对此没有意见。您可能希望使用适量的缓存并包括故障保护,但这对 Apple 来说当然没问题,而且看起来工作得很好。

不过,如果您正在寻找替代方案,总有 NSUserDefaults,您可以使用它在您的 WatchKit app/Today 扩展程序和您的伴侣 iOS 之间共享少量数据] 应用


从您提供的代码来看,您似乎已经在使用 NSUserDefaults,并且您的用户和您对延迟的担忧是有道理的 – 对于公交车时间之类的数据,最新数据是尽可能需要。

对于像这样的 Today 扩展应用程序,我认为网络调用是合理的(有适当的回退),因为您需要最新的信息。

我还会查看 "Updating Content" 下的 the Today extension guide,了解有关扩展程序如何管理要显示的新数据的更多详细信息,因为存在限制。