我正在修改我的应用程序,其中之一是当我的应用程序处于后台时,无法获取最新的数据。当我使用我的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
并格式化数据以呈现给用户。然而,由于应用程序的性质(获取公交时间),我收到了反馈,用户希望获得更实时的数据。这是有道理的。因此,我需要一种方法来使扩展程序获取最新的数据。由于扩展程序无法直接调用应用程序控制器,目前我的唯一选择似乎是使用我拥有的排序方法(在一个单独的类中),这些方法完成大部分繁重的工作。