首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取NSGenericException的原因为:“*集合<NSConcreteHashTable:枚举时0x282c34140>发生了变化。”

获取NSGenericException的原因为:“*集合<NSConcreteHashTable:枚举时0x282c34140>发生了变化。”这个异常通常发生在Objective-C语言中,它表示在枚举(或遍历)集合的过程中,集合的内容发生了变化,导致出现了不一致的情况。

具体而言,当一个集合(比如NSArray、NSDictionary等)被枚举时,如果在枚举的过程中有其他地方修改了集合的内容,就有可能导致集合中的元素被添加、删除或者修改,这就违背了枚举的一致性要求,从而引发了NSGenericException异常。

解决这个异常的方法有多种途径,可以根据具体情况选择合适的方式:

  1. 避免在枚举过程中修改集合:在进行集合的枚举时,确保没有其他地方会修改集合的内容。可以在枚举过程中使用锁或者信号量等机制,确保在枚举期间集合是不可变的。
  2. 使用快照:在枚举过程中,可以创建集合的快照(snapshot),然后在快照上进行枚举操作,这样即使原始集合发生变化,也不会影响枚举的一致性。
  3. 使用枚举器:集合类通常提供了枚举器(enumerator)的接口,通过使用枚举器进行集合的遍历,可以避免一些由集合变化导致的异常情况。

总之,获取NSGenericException异常的原因是集合在枚举过程中发生了变化,为了避免这个异常,我们需要注意在枚举集合时,避免对集合进行修改,并可以使用快照或者枚举器等方法来保证枚举的一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

被忽视Java基础

在平时阅读中,一旦有眼前一亮感觉,我总会把书中内容打磨一番,沸点,想想 2021年 也临近年底了,今天就来做个总结。 方法签名组成部分有且仅有方法名和参数列表。...如果传递是基本数据类型,则副本数值变化不会影响到数据; 如果传递是引用数据类型,副本和数据共享引用地址,被引用对象属性变化会同步给副本和数据。 3....枚举类中所有枚举项即是这个枚举实例。 同一种枚举项即使创建多个对象,这些对象引用地址也相同,即引用自同一个实例。 2....()方法获取,此方法仅仅为获取数组元素泛型而存在,其实这个方法更适合放在 Array 类中。...生成日志和调试消息,通常要通过getClass()方法来获取当前类信息,但因为此方法前隐藏了一个 this 关键字,所以在静态方法中无法使用。

28600

swift4.0语法杂记(精简版)

到后来苹果公司大力投入swift语言研发,于2014年布这一语言第一版本。swift2.0之后语法则趋于稳定,2017年swift4.0虽有改动,但也只是增添了一些新特性。...拼接字符串格式变化 假设在某些特定地方需要输出特定位数字符,比如或时间输出,就需要使用占位符来调整字符串格式。...对于计算属性则不需要定义属性观察者,因为我们可以在计算属性setter中直接观察并响应这种值变化。 可以通过设置以下观察方法并响应这种值变化。...因为它没有考虑到枚举全部成员。如果说不需要匹配所有的枚举成员,可以提供一个default分支来涵盖其他未明确处理枚举成员。...当字符串销毁,由于字符串 Buffer 被子字符串 Owner Object 持有了,字符串 Buffer 并不会释放,造成极大内存浪费。

15.4K90
  • Java List用法代码分析——非常详细

    Java中可变数组原理就是不断创建新数组,将数组加到新数组中,下文对Java List用法做了详解。...List:元素是有序(怎么存就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为集合体系有索引 ArrayList:底层数据结构使用是数组结构(数组长度是可变百分之五十延长...,有了该方法就可以遍历该集合所有元素 System.out.println(a1.subList(1, 3));//获取集合中某一部分元素,包含头不包含尾 } List集合特有的迭代器...:ListIterator(是Iterator子接口) 注意: 在迭代,是不可以通过集合对象方法操作集合元素因为会发生ConcurrentModificationException异常(并发异常...)所以,在迭代器,只能用迭代器方法造作元素因为Iterator方法是有限所以只能对元素进行判断,取出,删除操作如果想要其他操作如添加,修改等,就需要使用其子接口,ListIterator 该接口只能通过

    36920

    iOS键值观察KVO实例详解简介实例效果实现方式进阶用法

    实现机制为,为可能改变数据增加一个观察者,在上面的说法中这个观察者就是controller,它去观察这个数据有没有发生变化,一旦发生变化,就会得到一个信号,从而获取变化数据,进行自己要做操作...现在我们给这个实例化了学生模型添加一个观察者,定义为我要观察学生模型分数变化情况,这时,如果这个学生模型分数发生了变化,比如在按钮响应中只对模型分数属性进行修改,KVO这个机制就会自动给观察者发送通知...这样就实现了一套KVO键值观察流程,当然最后还缺一步就是移除观察者,不过要在确实需要移除时候再移除,因为移除后就不再会收到变化通知了。...options参数可以设为: NSKeyValueObservingOptionOld:这表示在回调获取变化时可以通过change参数获取变化之前值; NSKeyValueObservingOptionNew...是2、3、4时候,也就是说是观察集合数据,这个key值是一个NSIndexSet,包含操作对象索引集合 NSKeyValueChangeNotificationIsPriorKey:包含一个布尔值

    35330

    Java List 用法代码分析(非常详细)

    Java中可变数组原理就是不断创建新数组,将数组加到新数组中,下文对Java List用法做了详解。...List:元素是有序(怎么存就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为集合体系有索引 ArrayList:底层数据结构使用是数组结构(数组长度是可变百分之五十延长...,有了该方法就可以遍历该集合所有元素 System.out.println(a1.subList(1, 3));//获取集合中某一部分元素,包含头不包含尾 } List集合特有的迭代器...:ListIterator(是Iterator子接口) 注意: 在迭代,是不可以通过集合对象方法操作集合元素因为会发生ConcurrentModificationException异常(并发异常...)所以,在迭代器,只能用迭代器方法造作元素因为Iterator方法是有限所以只能对元素进行判断,取出,删除操作如果想要其他操作如添加,修改等,就需要使用其子接口,ListIterator 该接口只能通过

    1.2K10

    Acwing数学与简单DP(二)

    需要存储: 指向序列某个元素,截至该元素最长子序列长度 这可以通过创建一个与序列等长dp数组实现。...如果选了,那上一步就应该选了k-1个物品,而且最大值只能是[1,c-1],把这些状态方案数累加。 从集合角度分析DP,本题可以描述为: 因为涉及四层循环,四重DP,所以比较费解。...偏移量所在维度c应该整体偏移,因此代码中该维度范围是[1,13],并且在读入w[i][j],进行了++操作。 DP状态计算,也就是集合划分,主要是参考最后一步。...c在集合中,表示当前选取最大元素,因为是递增选取,当确定要选择当前元素,那么c值应该当前元素值。 为什么要判断c==w[i][j]?因为DP过程还是在枚举枚举四个维度所有可能情况。...因为系数和下标发生了变动,为了便于理解,设前n-1项和为C。

    15410

    如何编写高质量代码

    对象不可更改子列表只是列表一个视图推荐使用subList处理局部列表生成子列表后不要再操作列表使用Comparator进行排序不推荐使用binarySearch对列表进行检索;集合元素必须做到...推荐使用subList处理局部列表 (需求:要删除一个ArrayList中20-30范围内元素;将列表转换为一个可变列表,然后使用subList获取列表20到30范围内一个视图(View),...);3、枚举具有内置方法,values方法可以获取到所有枚举值;4、枚举可以自定义方法)。...因为Java中switch语句只能判断byte、short、char、int类型,JDK7可以判断String类型,使用switch语句判断枚举类型,会根据枚举排序值匹配。...Java之所以这样处理,是因为反射本意只是正常代码逻辑一种补充,而不是让正常代码逻辑产生翻天覆地改动,所以public属性和方法最容易获取,私有属性和方法也可以获取,但要限定本类。

    1K20

    java中Set集合

    HashSet具有以下特点: 不能保证元素排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化; HashSet不是同步集合元素值可以是null; 内部存储机制 当向HashSet集合中存入一个元素...如果需要把某个类对象保存到HashSet集合中,重写这个类equals方法和hashCode方法,应尽量保证两个对象通过equals那个法比较返回true,他们hashCode方法返回值也相等...注意问题 大部分类在实现CompareTo(Object o)方法,都需要将被比较对象obj强制类型转换成相同类型,因为只有相同两个实例才会比较大小。...EnumSet类 EnumSet是一个专门为枚举类设计集合类,EnumSet中所有元素都必须是指定枚举类型枚举值,该枚举类型在创建EnumSet显式或隐式地指定。...EnumSet complementOf(EnumSet s):创建一个其元素类型与指定EnumSet里元素类型相同EnumSet集合,新集合里包含集合不包含枚举值。

    1.2K10

    Java设计模式之行为型模式

    ISubject持有一个IObserver集合,当ISubject自身发生变化时候,会遍历这个IObserver集合,将变化一一通知每个IObserver。...这样即使被调用者发生了变化,我们只需变更命令实现即可,调用者无需进行修改,这样就解除了调用者和被调用者之前耦合关系。...主要用来存储器对象内部状态,但是具体需要存储哪些数据是由器对象来决定。另外备忘录应该只能由器对象来访问它内部数据,器外部对象不应该能访问到备忘录对象内部数据。...通过使用备忘录对象,来封装器对象内部状态,虽然这个对象是保存在器对象外部,但是由于备忘录对象窄接口并不提供任何方法,这样有效保证了对器对象内部状态封装,不把器对象内部实现细节暴露给外部...(2)简化了器。备忘录对象负责保存状态,被保存到器对象之外,让Storage来管理他们请求状态,使得器状态保存和存储管理分离,从而使器对象得到简化。

    28030

    Effective-java-读书笔记之枚举和注解

    存在诸多不足, 在类型安全性和使用方便性方面没有任何帮助.采用int枚举模式程序是十分脆弱, 因为int枚举是编译时常量, 被编译到使用它们客户端中....如果与枚举常量关联int发生了变化, 客户端就必须重新编译. 如果不重新编译, 程序还是可以运行, 但是行为是不确定.而且, 要打印int枚举, 所见到只是一个数字....如果这样硬编码字符串常量中包含书写错误, 编译不会检测到, 在运行时会报错.Java1.5开始提供了枚举类型.枚举类型: 实例受控, 是单例泛型化, 本质上是单元素枚举.枚举类型提供优点:编译类型安全...)这样集合操作.但位域有着int枚举常量所有缺点....(一维和多维例子.)第38条 用接口模拟可扩展枚举Java语言上是不支持枚举继承, 这并不意外, 因为枚举扩展最后证明都不是什么好点子.

    55650

    LayaAir开始在GitHub实时提交了,2.3版支持多光源渲染, 3D效果华丽提升!3D导出插件支持Unity2018了!

    2.2.0以下版本升级注意事项 LayaAir引擎在新版本之前,会先将上个版本稳定下来。...想升级2.2.0线上项目可以踏实更新了。 由于2.2开始IDE编译模式发生了变化。这里我们也再次总结一下2.1或者更低版本升级2.2.0正式版本或者更高版本注意事项。...6、Shader增加全局u_SunLight变量,可获取全局太阳光变量。 7、增加blendEquation混合方程,支持ADD、SUBTRACT、REVERSE_SUBTRACT三种枚举。...升级注意事项如下: 1、升级后宏定义由原来number变更为ShaderDefine类型,获取宏定义由registerDefine函数变更为Shader3D.getDefineByName静态函数,...3、升级后Shader预编译建议使用compileShaderByDefineNames,宏定义字符相对compileShader,Mask值更稳定,不会因为注册顺序调整导致值发生变化

    1.6K30

    Java集合面试题&知识点总结(中篇)

    以下是 EnumSet 一些特性: EnumSet 中所有元素都必须来自同一个枚举类型,它在创建显式或隐式地指定。...这样,读操作都是在集合上进行,不需要加锁;写操作是在副本上进行,也不会影响读操作,实现了读写分离。 “写复制” 优点是可以实现高并发读操作,适合读多写少并发场景。...“Fail Safe” 机制实现通常是通过创建集合副本来实现。当进行遍历操作,遍历集合副本,而不是集合。...这两个类在进行修改操作,会创建集合副本,然后在副本上进行修改,最后再将引用指向新副本。...这是因为在遍历过程中,集合结构发生了改变,但是这个改变并没有同步到正在进行迭代过程中,所以会抛出异常。

    22920

    Java Review (二十六、集合----- Set 集合

    HashSet 按 Hash算法来存储集合元素,因此具有很好存取和查找性能。  HashSet 具有以下特点 : 不能保证元素排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化 。...LinkedHashSet 需要维护元素 插入顺序,因此性能略低于 HashSet 性能,但在迭代访问 Set 里全部元素将有很好性能,因为它以链表来维护内部顺序 。...异常,因为大部分类在实现 compareTo(Object obj)方法,都需要将被比较对象 obj 强制类型转换成相同类型。...EnumSet complementOf(EnumSet s): 创建一个其元素类型与指定 EnumSet 里元素类型相同 *EnumSet 集合,新 EnumSet 集合包含 EnumSet 集合所不包含...、此枚举类剩下枚举值(即新EnumSet 集合 EnumSet 集合集合元素加起来就是该枚举所有枚举值)。

    70910

    这篇12分只有2张图文章思路值得借鉴

    作者假设这些发肿瘤会因先前与mCRPC相关改变而富集,并且与那些不复发前列腺肿瘤不同。...此外,作者评估了一组相同患者、匹配、未经治疗和mCRPC活组织检查,以确定这些基因组缺陷在肿瘤进化治疗过程中是否发生了变化。...根据诊断结果,设置样本:一组为局限性前列腺癌,一组转移性前列腺癌。...表3 原发性前列腺癌队列1和TCGA队列比较(队列1包括诊断未转移原发性前列腺癌患者)作者将致命性前列腺癌(诊断未发生转移灶)与TCGA队列(预后较好)进行基因组学比较,发现: TP53...由于既往研究报道了癌灶间基因组异质性,原发性前列腺癌可以是多灶性,因此作者不能排除在某些情况下,发肿瘤样本可能不能代表活检中优势肿瘤克隆。

    48910

    C#内建接口:IEnumerable

    01 什么是Enumerable 在一些返回集合数据接口中,我们经常能看到IEnumerable接口身影。那什么是Enumerable呢?...就像人们排队去打疫苗,排队的人就是可枚举,他们有的开车,有走着,有早有晚全都按照先来后到顺序排好队,当医生开始进行打疫苗工作,他并不关心有多少人在排队,也不关心是否有人迟到,当然也不能越过第一个人让其后边的人先进来打...02 接口成员及使用示例 我们先来看接口中有什么,因为IEnumerable接口一般都是用其泛型版,我们直接看这种: 接口内容很简单,但是其中又出现了一个名为IEnumerator接口...也就是说通过枚举我们可以获取一个枚举器,通过枚举器我们能找到一个个数据对象,明白了这一点,我们就能大体上了解如何通过IEnumerable来获取数据了,那下面请看代码: 代码中有一个返回IEnumerable...方法,用来模拟数据产生,其中用到了一个yield关键字,我简单来说yield return就是部分返回(产生了一个数据,就返回一个,yield具体用法请看我上一篇分享文章:[C#.

    84920

    React面试:谈谈虚拟DOM,Diff算法与Key机制5

    图片 如图 所示,旧集合中包含节点A、B、C 和 D,更新后集合中包含节点 B、A、D 和C(只是发生了位置变化,各自节点以及内部数据没有变化),此时新旧集合按顺序进行逐一diff 差异化对比,发现...React 发现这类操作烦琐冗余,因为这些都是相同节点,但由于位置顺序发生变化,导致需要进行繁杂低效删除、创建操作,其实只要对这些节点进行位置移动即可。...见下面key机制3. key机制(1)key作用当同一层级某个节点添加了对于其他同级节点唯一key属性,当它在当前层级位置发生了变化后。...例子1:同一层级所有节点只发生了位置变化: 图片按新集合中顺序开始遍历B在新集合中 lastIndex(类似浮标) = 0, 在旧集合中 index = 1,index > lastIndex 就认为...,而不进行移动则表示无需更新渲染例子2:同一层级所有节点发生了节点增删和节点位置变化:图片同上面那种情形,B不进行移动,lastIndex=1新集合中取得E,发现旧中不存在E,在 lastIndex处创建

    1.3K50
    领券