NL91 2017-12-01 03:57 采纳率: 33.3%
浏览 851

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

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);

假设地址数组中只有一个地址“上海”,我预想的输出顺序应该是:
1.“需要解析的地址为上海”
2.有1个Item被添加
3.一共有1个item

但实际是:
1.需要解析的地址为上海
2.一共有0个Item
3.有1个Item被添加

这是为什么?

  • 写回答

1条回答 默认 最新

  • shuimoyichen 2018-01-11 01:59
    关注

    /**

    • 有一个数组a[N],要求每隔两个数删掉一个数,到末尾则又循环到开头继续进行
    • 求最后一个被删掉的数的原始下标位置
    • 例如,一个数组:{0, 1, 2, 3, 4, 5, 6, 7}
    • 0->1->2(第一遍,删除)->3->4->5(第一遍,删除)->6->7->
    • 0(第二遍,删除)->1->2(已删除)->3->4(第二遍,删除)->5(已删除)->6->7...
    • 循环直到数组中最后一个元素被删除

    • 当然,这里并未真正删除元素,只是用标志位表示已经被删除
    • @author Wll
    • */

      public class DeleteEveryTwo {

      public static void main(String[] args) {

      int index = getLastDeletedIndex(8);

      System.out.println("The last index deleted is " + index);

      }

      /**

      • @param a
      • 数组长度
      • @return 最后被删除的数的原始下标
        */

        public static int getLastDeletedIndex(int len) {

        if (len <= 0) { // 如果数组长度不满足要求则返回 -1

        return -1;

        }

        int[] arr = new int[len];

        for (int i = 0; i < len; i++) { // 初始化每个元素的值为当前下标

        arr[i] = len;

        }

        final int DELFLAG = len + 1; // 删除标志位

        int currentSize = len; // 记录数组当前有效长度(即未被置为删除标志的元素个数),最后变为 0

        final int STEP = 2; // 步长

        int count = 0; // 步长计数

        int lastDelIndex = 0; // 记录最后被删除的元素的下标

        int i = 0; // 循环下标

        while (currentSize != 0) {

        if (arr[i] != DELFLAG) { // 判读当前元素是否等于删除标志

        if (count++ == STEP) { // 当步长计数满足步长则

        arr[i] = DELFLAG; // 将元素置为删除标志位

        lastDelIndex = i; // 记录该处下标

        currentSize--; // 有效数组长度减 1

        count = 0; // 步长计数归零

        System.out.println("Deleted index is " + i % len);

        }

        }

        i = (i + 1) % len; // 下标取余实现循环下标

        }

        return lastDelIndex;

        }

        }

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题