【发布时间】:2015-05-23 13:53:30
【问题描述】:
我有一个监控重大位置变化的应用。
收到新的计算后,我想计算从当前位置到指定位置的持续时间。
为了计算我使用MKDirections 类中的calculateETAWithCompletionHandler: 的持续时间。
只要应用程序在前台,一切都会按预期运行。
当我将应用程序发送到后台时,它会在后台正确接收位置更新,并且一切正常,直到我调用 calculateETAWithCompletionHandler:,它永远不会返回结果。
MKDirectionsHandler,calculateETAWithCompletionHandler: 的完成处理程序。在后台时从不调用。
一旦应用再次进入前台,所有等待完成的处理程序都会收到结果。
MKMapItem* origin = [MKMapItem mapItemForCurrentLocation];
MKMapItem* destination = [[MKMapItem alloc] initWithPlacemark:destinationPlacemark];
MKDirectionsRequest* request = [MKDirectionsRequest new];
[request setSource:origin];
[request setDestination:destination];
[request setTransportType:MKDirectionsTransportTypeAutomobile];
MKDirections* directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateETAWithCompletionHandler:^(MKETAResponse *response, NSError *error) {
completion(response.expectedTravelTime, error);
}];
是否不允许在后台调用calculateETAWithCompletionHandler:?
有没有办法解决这个问题?
【问题讨论】:
-
我相信您使用
MKMapItem的方式是问题所在,您需要在主线程上运行它。所以我认为它不会满足你的需要。在后台收集位置时,您应该改用CoreLocation。 -
@rmp 感谢您的提示。这似乎是解决方案。如果您将其发布为答案,我会接受。
-
好的,我会这样做很高兴它帮助解决了您的问题
-
@pre 你能找到后台执行“calculateETAWithCompletionHandler:”的解决方案吗?
-
这个问题有什么解决办法吗?自创建帖子以来已经大约 4 年了,我目前遇到了同样的问题。 Directions.calculate 在主线程上运行,但在应用程序处于后台状态时返回空数组。这是苹果的错误吗?
标签: ios objective-c mapkit objective-c-blocks