我使用的代码将在此之后发布,以根据用户使用自然语言查询在UITextField中键入的内容返回最近的位置。我将所有位置存储在一个数组中,并将该数组传递给prepareForSegue中的下一个场景(UITableViewController)。比我使用数组加载所有的地方。在模拟器上,它显示了Apple有意义的所有默认位置。但是,我在真正的iPhone上测试它,尽管为应用程序启用了位置服务,但我仍然得到默认位置。我一次又一次地尝试,但我无法得到实际的结果。几周前它曾经工作过一次,但从那以后它就停止了。有任何想法吗?这是代码:
- (void) performSearch {
NSLog(_searchLabel.text);
MKLocalSearchRequest *request =
[[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = _searchLabel.text;
_foundPlaces = [[NSMutableArray alloc] init];
_foundPlacesD = [[NSMutableArray alloc]init];
//NSLog(_place);
MKLocalSearch *search =
[[MKLocalSearch alloc]initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse
*response, NSError *error) {
if (response.mapItems.count == 0)
NSLog(@"No Matches");
else{
for (MKMapItem *item in response.mapItems)
{
NSString *n = item.name;
[_foundPlaces addObject:n];
NSLog(n);
MKDirectionsRequest *dr = [MKDirectionsRequest new];
MKMapItem *source = [MKMapItem mapItemForCurrentLocation];
[dr setSource:source];
[dr setDestination:item];
MKDirections *directions = [[MKDirections alloc]initWithRequest:dr];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *mresponse, NSError *error) {
if(mresponse.routes.count == 0){
NSLog(@"No routes");
}
else{
for(MKRoute *route in mresponse.routes){
CLLocationDistance d = route.distance/1000;
NSString *dText = [NSString stringWithFormat:@"%g kilometers", d];
[_foundPlacesD addObject:dText];
NSLog(dText);
}
}
}];
}
[self performSegueWithIdentifier:@"locationResults" sender:self];
}
}];
}
答案 0 :(得分:0)
我相信我修好了。错误是segue在完成之外执行,应该在内部执行。