解析一个包含多个地址的数组时循环顺序异常。

NL91 2017-12-01 12:05:37
ios开发新手,求教。。
尝试使用CLGeocoder解析一个addressArray并依次添加到一个MapItemArray中,代码如下:

[self getAddress];//一个将地址添加到数组的方法
int m=0;
while (m<self.addressArray.count){
NSString *address=self.addressArray[m];
NSLog(@"需要解析的地址为%@",address);
CLGeocoder *geocoder=[[CLGeocoder alloc]init];
[geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if(error||placemarks.count==0){
NSLog(@"解析失败");
}else{
CLPlacemark *place=[placemarks lastObject];
MKPlacemark *mp=[[MKPlacemark alloc]initWithPlacemark:place];
MKMapItem *mapItem=[[MKMapItem alloc]initWithPlacemark:mp];
[self.mkItemArray addObject:mapItem];
NSLog(@"有%lu个Item被添加",(unsigned long)self.mkItemArray.count);
}
}];
m+=1;
}
NSLog(@"一共有%lu个Item",(unsigned long)self.mkItemArray.count);
[code=objc]

假设地址数组中只有一个地址“上海”,我预想的输出顺序应该是:
1.“需要解析的地址为上海”
2.有1个Item被添加
3.一共有1个item
但实际是:
2017-12-01 11:53:21.955961+0800 Navigation[2565:331460] 需要解析的地址为上海
2017-12-01 11:53:21.957057+0800 Navigation[2565:331460] 一共有0个Item
2017-12-01 11:53:22.359883+0800 Navigation[2565:331460] 有1个Item被添加

这是为什么?
...全文
394 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
不担心 2017-12-06
  • 打赏
  • 举报
回复
block是异步执行的,最简单的办法就是把NSLog(@"一共有%lu个Item",(unsigned long)self.mkItemArray.count);这一句仍到block里执行,如果语句很多的话就放到一个方法里,然后在block里调用一下这个方法就行了
NL91 2017-12-06
  • 打赏
  • 举报
回复
引用 3 楼 disburden 的回复:
block是异步执行的,最简单的办法就是把NSLog(@"一共有%lu个Item",(unsigned long)self.mkItemArray.count);这一句仍到block里执行,如果语句很多的话就放到一个方法里,然后在block里调用一下这个方法就行了
现在主要的目的是把解析出来的item添加到self.mkItemArray中,然后在方法外部调用,如果是block内部添加,出了block就没了,有什么好办法吗?
NL91 2017-12-05
  • 打赏
  • 举报
回复
引用 1 楼 xttxqjfg 的回复:
你还没有明白这段代码的执行流程 在第8行和第20打上断点,看看哪个先执行你就明白了
这个我知道是先执行第20行再执行的block中的内容,但不知道怎么先执行BLOCK?
xttxqjfg 2017-12-04
  • 打赏
  • 举报
回复
你还没有明白这段代码的执行流程 在第8行和第20打上断点,看看哪个先执行你就明白了

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧