zoukankan      html  css  js  c++  java
  • [Bug]枚举数组,并找到某些元素删除

    lldb报错:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7f9a5a47dda0> was mutated while being enumerated.'

    bug代码

        //判断是否存在,存在就删除
        for (NSDictionary *dic in userAccountPwdMutalDatas) {
            if ([dic objectForKey:account]) {
                [userAccountPwdMutalDatas removeObject:dic];
            }
    

      

    原因

    当for in 时,正在被枚举的时候,改变数组(例如删除),会打乱其的count 。

    解决一:将要操作的数据copy到另一个数组里

    NSMutableArray * arrayB = [[NSMutableArray alloc] init];
    for (arrayA *a in anArray){
         if(some condition){
         //[anArray removeObject:a];  
            [arrayB addObject:a];
        }
    }
    [arrayA removeObjectsInArray:arrayB];
    

    解决二:循环枚举顺序,不要从 0到 count 改成从count到0

    for(int i = [anArray count] -1;i>=0;i--){
    
    }
    

      

    解决三:

    for(int i=0; i < [array count]; i++){
            if(YES){
                [array removeObjectAtIndex:i];
                i--;
            }
    } 
    

      

    Tip:其实这个问题,自己遇到过,并且解决了。但是没有做记录,结果再次遇到的时候,只觉得lldb报错眼熟,还花了大力气到google 上搜。好记性不然烂笔头。这次做个笔记,

    参考文档:http://www.cocoachina.com/bbs/read.php?tid=23251

  • 相关阅读:
    python全栈闯关--16-匿名函数
    python全栈闯关--15-内置函数
    python全栈闯关--14-生成器进阶
    示例库
    MySQL的远程连接
    前后端传输编码方式
    后端接收前端时间参数
    控制器接参的空值问题
    MyBatis模糊查询的几种方式
    MySQL常用函数
  • 原文地址:https://www.cnblogs.com/blogwithstudyofwyn/p/5959628.html
Copyright © 2011-2022 走看看