我正在修改我的应用程序,其中一件事是,当我的应用程序背景时,我无法获取最新数据。当我使用今天的延期时,我也不能委托我的主应用程序为我做一些电话。
所以这似乎让我可以选择让我的扩展扩展到服务器并对数据进行排序。因此,我必须为我的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
并格式化要呈现给用户的数据。但是,我得到了反馈,由于应用程序的性质(获取总线时间),用户期望更多的当前数据。这是有道理的。所以我需要一种方法来获取扩展的最新数据。由于扩展不能直接调用应用程序控制器,我目前唯一的选择似乎是使用我所拥有的排序方法(在一个单独的类中),它完成了大部分繁重的工作。