异常Crash之 NSGenericException,NSArray was mutated while being enumerated

  *** Terminating app due to uncaught exception ‘NSGenericException‘, reason: ‘*** Collection <__NSArrayM: 0x17542520> was mutated while being enumerated.‘

  从字面上不难理解,Crash的原因在于我们一边遍历数组,一边修改该数组数据。例如:
      NSMutableArray *OriginalArray = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"3",@"4",nil];
  for (id obj in OriginalArray){
    if ([obj isEqualToString:@"3"]){
      [OriginalArray removeObject:obj]
    }
  }

      很自然我们会想到copy一个数组,在副本数组中进行遍历操作,如果符合条件我们就在原始数组中进行处理。
      NSMutableArray *DuplicateArray = [OriginalArray mutableCopy];
      for(id obj in DuplicateArray){
    if ([ob isEqualToString:@"3"]){
      [OriginalArray removeObject:obj];
    }
  }

时间: 2024-10-05 06:26:41

异常Crash之 NSGenericException,NSArray was mutated while being enumerated的相关文章

【转】was mutated while being enumerated 你是不是以为你真的懂For...in... ??

原文网址:http://www.jianshu.com/p/ad80d9443a92 支持原创,如需转载, 请注明出处你是不是以为你真的懂For...in... ??哈哈哈哈, 我也碰到了这个报错 .究其原因, 顾名思义 "在枚举的时候发生了变化"for...in...利用了快速枚举NSFastEnumerate当我们想要改变数组变量中的数据或者删除数组中的数据的时候,不能用for...in... 应该是Objective-C中的foreach循环与Java中的相似,在内部是用iter

奔溃日志:was mutated while being enumerated

这两天发现app的一个崩溃,提示是 *** Collection <CALayerArray: 0x18904630> was mutated while being enumerated. 找了一天终于找到了罪魁祸首,代码是这样的 for (NSInteger i = 0; i < postArr.count; i++) { for (NSInteger j = i+1; j < postArr.count; j++) { MoviePhoto *mp = postArr[i];

用ndk-stack分析应用native程序异常crash掉

adb logcat | "/home/hxl/bin/android-ndk-r10d/ndk-stack" -sym "/home/hxl/plu/BadGame/proj.android/obj/local/armeabi/obj/local/armeabi" 这几天在做android下的音频播放器,使用ffmpeg做解码器,过程中出现一个问题,执行的时候出现下面这个问题: Java代码   03-24 15:05:37.094: I/DEBUG(3223):

Bug-iOS: Collection &lt;__NSArrayM: 0x&gt; was mutated while being enumerated.

//init a NSArray NSMutableArray *arr2 = [NSMutableArray array]; for (int i=0; i<10; ++i) { NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%d", i], @"a", nil]; [arr2 addObject:

解决Collection &lt;__NSArrayM: 0xb550c30&gt; was mutated while being enumerated

当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃,网上的方法如下: 1 2 3 4 5 6 7 8 9 NSMutableArray * arrayTemp = xxx; NSArray * array = [NSArray arrayWithArray: arrayTemp]; for (NSDictionary * dic in array) {    if (condition){       [arrayTemp removeObject:dic];

【学习ios之路:Object-C错误】Collection &lt;__NSArrayM: 0xb550c30&gt; was mutated while being enumerated.

错误提示: 产生错误的原因: 当程序在执行遍历时,同时又修改数组中的内容,导致崩溃. 解决方法如下: 方法1:定义一个一模一样的数组,遍历新数组的同时,对原数组进行操作修改. 例如: NSMutableArray *arrayTemp = [@[@"aa",@"vv",@"bb"] mutableCopy]; NSArray *array = [NSArray arrayWithArray: arrayTemp]; for (NSString *

多线程导致的iOS闪退分析

前段时间做了一个APP,在测试的时候遇到了很奇怪的闪退情况. 这个APP是有关声音处理的:设备一边录音,一边对声音进行处理.所以需要2个线程,一个线程将录音保存下来,另一个处理保存下来的声音.测试的时候,会在1~10min之内,不定时.无预兆的出现闪退的情况,报的错也各不一样,有的是 1)"NSGenericException 'Collection was mutated while being enumerated" 或者: 2)"pointer being freed

12-5 NSSet

原文:http://rypress.com/tutorials/objective-c/data-types/nsset NSSet NSSet, NSArray, and NSDictionary are the three core collection classes defined by the Foundation Framework. An NSSet NSSet, NSArray, 和 NSDictionary是Foundation框架中三个主要集合类.一个NSSet对象是一个静态

iOS知识树,知识目录(包括对象、Block、消息转发、GCD、运行时、runloop、动画、Push、KVO、tableview,UIViewController、提交AppStore)

本文旨在总结iOS知识网络,该知识网络罗列出常见UIKit,Foundation的对象特点和一些使用经验:文本编辑采用树的形式,对知识点进行罗列,并标注一些使用经验(★)希望对初学者有用或给一些解决疑难杂症者提供思路:某些知识点会深入探讨:通过总结希望站在一个较高平台的角度全观Objective-C.知识树中有些是原创文章,有些则是转载网络上iOS大神的文章.笔者会尽量详细的介绍各个知识点.当然一个人的知识面是相当有限的,在给各位读者提供知识参考的同时,欢迎大家对本文提意见. /->UIView