过滤/排序MKLocalSearch响应

Dan*_*son 4 iphone mapkit ios mklocalsearch

我正在MKLocalSearch执行地图搜索。我的问题是响应中MKMapItems的排序。例如,搜索我当前所在的城市将首先返回许多与城市名称有关的业务,而我必须向下滚动一会才能找到实际的城市。我正在使用的region属性MKLocalSearchRequest将搜索集中在附近区域。

我的问题是:

  1. 您可以影响回复返回给您的顺序吗?例如,只要输入第一个字母,“地图”应用就会在顶部列出我的城市。为什么没有POI:s或企业列在最前面?
  2. 有没有一种方法可以完全从搜索中消除企业,而仅获得响应地址?

不知道是否相关,但是这里是搜索的代码:

-(void)issueLocalSearchLookup:(NSString *)searchString {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.location.coordinate, 30000, 30000);
    self.localSearchRequest = [[MKLocalSearchRequest alloc] init];
    self.localSearchRequest.region = region;
    self.localSearchRequest.naturalLanguageQuery = searchString;
    self.localSearch = [[MKLocalSearch alloc] initWithRequest:self.localSearchRequest];

    [self.localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
        if(error){
            NSLog(@"LocalSearch failed with error: %@", error);
            return;
        } else {
            for(MKMapItem *mapItem in response.mapItems){
                [self.data addObject:mapItem];
            }
            [self.searchDisplayController.searchResultsTableView reloadData];
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*ker 5

MKLocalSearchRequest仅接受naturalLanguageQuery和region作为参数,因此您可以“执行仅返回地址的搜索吗?”-否。

但是,在请求完成后很容易筛选列表。如果您想从列表中过滤掉企业,可以使用一个简单的NSPredicate来完成。

NSPredicate *noBusiness = [NSPredicate predicateWithFormat:@"business.uID == 0"];
NSMutableArray *itemsWithoutBusinesses = [response.mapItems mutableCopy];
[itemsWithoutBusinesses filterUsingPredicate:noBusiness];
Run Code Online (Sandbox Code Playgroud)