Ios 基于多个点的纬度和经度获取地址

Ios 基于多个点的纬度和经度获取地址,ios,objective-c,Ios,Objective C,我试图循环遍历一个包含大约10个纬度和经度值的数组,并从中获取地址。我使用Xcode创建了一个控制台应用程序,我能够循环文件并检索位置,将它们添加到NSMutableArray并将其传递给下面的函数。但是,从未调用完成处理程序块。我可能做错了什么?如果此时需要查看任何其他代码,请告诉我。我只是感到沮丧和困惑,不知道会是什么 void nextGeocodeRequest(int start, NSMutableArray * myLocations) { @autoreleasepool

我试图循环遍历一个包含大约10个纬度和经度值的数组,并从中获取地址。我使用Xcode创建了一个控制台应用程序,我能够循环文件并检索位置,将它们添加到
NSMutableArray
并将其传递给下面的函数。但是,从未调用完成处理程序块。我可能做错了什么?如果此时需要查看任何其他代码,请告诉我。我只是感到沮丧和困惑,不知道会是什么

void nextGeocodeRequest(int start, NSMutableArray * myLocations)
{
    @autoreleasepool {
        for (int i = start; i < 1; i++)  {
            [ myLocations objectAtIndex:i ];
            double mylong = [[[myLocations objectAtIndex:i] valueForKey:@"Longitude"] doubleValue ];
            double mylat = [[[myLocations objectAtIndex:i] valueForKey:@"Latitude"] doubleValue];
            goal = [[CLLocation alloc] initWithLatitude: mylat longitude:mylong] ;

            CLGeocoder * geocoder = [[CLGeocoder alloc]init];
            [geocoder reverseGeocodeLocation:goal completionHandler:^(NSArray *placemarks, NSError *error) {
                NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
                if (error == nil && [placemarks count] > 0) {
                    placemark = [placemarks lastObject];

                    NSLog(@"this is the state '%@'",placemark.locality);
                    /*
                     self.state = [[State alloc] init];
                     self.state.name = placemark.locality;
                     self.state.code = placemark.administrativeArea;
                     self.state.stateId = 1;
                     self.state.stations = 300;
                     [self.states addObject:self.state];
                     */
                    //[self.tableView reloadData];

                    nextGeocodeRequest(i, myLocations);
                } else {
                    NSLog(@"%@", error.debugDescription);
                }
            }];
        } //ends the for
    // return 0;
    }
}
void nextGeocodeRequest(int start,NSMutableArray*myLocations)
{
@自动释放池{
for(int i=start;i<1;i++){
[myLocations objectAtIndex:i];
double mylong=[[myLocations objectAtIndex:i]valueForKey:@“经度”]double值];
double mylat=[[myLocations objectAtIndex:i]valueForKey:@“纬度”]double值];
目标=[[CLLocation alloc]initWithLatitude:mylat经度:mylong];
CLGeocoder*geocoder=[[CLGeocoder alloc]init];
[geocoder reverseGeocodeLocation:目标完成处理程序:^(NSArray*位置标记,NSError*错误){
NSLog(@“找到位置标记:%@,错误:%@”,位置标记,错误);
如果(错误==nil&&[placemarks count]>0){
placemark=[placemarks lastObject];
NSLog(@“这是状态“@”,placemark.locality);
/*
self.state=[[state alloc]init];
self.state.name=placemark.locality;
self.state.code=placemark.administrativeArea;
self.state.stateId=1;
self.state.stations=300;
[self.states addObject:self.state];
*/
//[self.tableView重载数据];
下一个GeoCodeRequest(i,我的位置);
}否则{
NSLog(@“%@”,错误。调试说明);
}
}];
}//结束
//返回0;
}
}

您需要
main
功能结束时运行当前的
,以便处理地理编码连接。然后,您需要定义在处理所有连接后应用程序将如何终止

[[NSRunLoop currentRunLoop] run];
(将其放在主功能中自动释放池的末尾)


当前,您的应用程序执行所有内联处理,准备大量连接,但不进行任何处理,然后直接退出。

可执行文件是否在请求完成之前终止?是的,它不会停止。虽然我不知道如何让它在退出之前等待完整的处理程序。一个小例子会有很大帮助。我是一个试图理解的傻瓜。真的很感谢你的回答。谢谢你,尽管你的回答没有直接解决我的问题,但它给了我足够的时间继续解决我的问题。我永远感谢你的回答,非常感激。