避免"NSArray在枚举时被修改"错误

46

我有一个NSMutableArray,它存储了Box2d物理仿真的鼠标关节。当使用多个手指玩时,我会收到异常,指出

NSArray在枚举时被更改了

我知道这是因为我正在从数组中删除对象并同时枚举它,从而使enum无效。

我想知道的是,解决这个问题的最佳策略是什么?我在网上看到了一些解决方案:@synchronized、枚举之前复制数组或将触摸关节放入垃圾数组进行以后的删除(我不确定这是否有效,因为我需要在从世界中删除关节后立即从数组中删除鼠标关节)。

11个回答

0
 NSMutableArray * founded = [NSMutableArray new];
for (XYZ * item in searchableArray) {
    if (item.xValue == 1) {
        [founded addObject:item];
    }
}
  //  NSSet * set = [[NSSet alloc] initWithArray:founded];
  //  [searchableArray removeItems:set];

提示:在我的情况下,可搜索数组是托管对象的一部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接