今天扩展或WatchKit应用程序调用数据是否被视为不良行为?

3

我正在修改我的应用程序,其中之一是当我的应用程序处于后台时,无法获取最新的数据。当我使用我的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];
}

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


1
我更多地是从概念角度提出问题。我的代码目前可以工作,所以我并不认为这是一个错误,而是一个障碍。如果您需要代码,我可以提供。 - David
我添加了一些代码,这样你就可以看到每个部分是什么。 - David
@Raptor,我不确定该代码是否完全与此问题相关;单独提出这个问题是合理的。 - AstroCB
1个回答

2
“ frowned upon” 是否被禁止很难判断,但是我目前在应用商店中有一些同时具有 Today 扩展和 WatchKit 应用程序的应用程序,这些应用程序会进行网络调用。
这并不一定意味着这样做是正确的,因为您所做的每个网络调用都会减慢用户的体验,但在我的经验中,苹果似乎对此没有问题。您可能需要使用大量缓存并包含故障保护,但这当然是可以接受的,并且似乎运行良好。
如果您正在寻找替代方案,那么始终可以使用 NSUserDefaults,您可以使用它在 WatchKit 应用/Today 扩展和配套 iOS 应用程序之间共享少量数据。
从您提供的代码来看,似乎您已经在使用NSUserDefaults,并且您和您的用户对延迟的关注是合理的——对于像公交时间表这样的应用程序,尽可能获取最新数据非常重要。
对于类似今日扩展的应用程序,我认为网络调用是可以接受的(在适当的情况下具备回退机制),因为您需要最新的信息。
我还建议查看“更新内容”下的Today extension guide,以获取有关扩展如何管理要显示的新数据的更多详细信息,因为存在某些限制。

谢谢!我实际上是从NSUserDefaults开始的,所以很容易保持它作为一个故障安全的实现。此时,我想我可以调用数据,如果url调用超时,我可以从用户默认值中加载。你读懂了我的心思,因为我问这个问题的原因是因为网络速度和减缓用户体验。 - David
@David,这就是我在我的应用程序中所做的(需要的信息比你的少),并且它运行良好。 - AstroCB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接