2017-08-02 43 views
-2

以下是假设运行NSMutableArray*Studentsaddress属性。但由于某些原因,for不是遍历整个NSMutableArray,只是第一个对象。for(id obj in studentArray)只遍历数组中的第一项

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
    for (id obj in studentArray) { 
     if ([obj isKindOfClass:[Student class]]) { 
      Student *selectedStudent = obj; 
      [geocoder geocodeAddressString:selectedStudent.address completionHandler:^(NSArray* placemarks, NSError* error){ 
       for (CLPlacemark* aPlacemark in placemarks) 
       { 
        NSString *latDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.latitude]; 
        NSString *lngDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.longitude]; 
        NSLog(@"%@, %@",latDest1, lngDest1); 
       } 
      }]; 
     } 
    } 

任何想法我可能做错了什么?该应用程序不会崩溃,只是简单地检查数组中的4名学生中的一名。 谢谢

+1

在调试器中使用断点和步进显示了什么? – CRD

+0

@CRD该应用程序不会崩溃,只是在日志中输出1组坐标而不是4(数组中有4个学生) – Manesh

+0

在上述代码的开始处放置一个断点,当调试器停止检查时变量值然后逐步通过。您可能还想在该块中添加一个断点,但无法进入该块。无论什么问题都可能会显而易见。 – CRD

回答

1

看起来地理编码不会返回下一个Student对象的地标。这个问题可能是因为地理编码请求过多。 大约从地理编码苹果文档:

发起正向地址解析请求后,不要试图 启动另一个正向或反向地址解析请求。地理编码 请求对每个应用都是速率限制的,因此在短时间内在 内请求太多请求可能会导致某些请求失败。当 超过最大速率时,地理编码器将一个包含 值网络的错误对象传递给完成处理程序。

+1

I.e.它是一种异步方法,您必须确保只有一个正在运行。 OP的代码忽略了后续调用返回的错误,这就是它透明失败的原因。 – bbum