NSMutableArray在被列举的同时突变了,您可以帮助我在这种情况下发生在我的代码中



这是名为"模型"的类的实现部分。在这里,我递归地调用最高3层的setDictionary方法,该方法会引起例外(在被枚举时突变的nsmutablearray突变),如果我将 for loop istead使用 forin forin >,我想了解此错误是如何发生的...任何人都可以帮助...请不要回复一些指向某些定义的链接,我已经阅读了很多文档,我不明白在这种情况下如何提出异常。

@implementation Model
@synthesize arraySubOptions,boolHasSub;
- (instancetype)init
{
    self = [super init];
    if (self) {
        boolHasSub = NO;
        arraySubOptions = [NSMutableArray new];
    }
    return self;
}
-(void)setDictionary:(NSDictionary*)dict{
    boolHasSub = [[[dict objectForKey:@"key_has_sub"] nullCheck:[NSString class]] boolValue];
    if (boolHasSub) {
        NSArray * arrayDict = (NSArray*)[self loadDataFromDB];
        if(arrayDict && (arrayDict.count>0) ){
            for (NSDictionary * dict in arrayDict) {
                Model * objOption = [Model new];
                [objOption setDictionary:dict];
                [arraySubOptions addObject:objOption]; /*This is the line that raises the exception. It raised  */
            }
        }
    }
}
@end

您的方法

[self loadDataFromDB] 

应该更改您的阵列,因此,当您到达

[objOption setDictionary:dict];

在该功能中输入两次,修改您的阵列并启动此例外。

使用" for"而不是" foreach"工作,因为您设置了循环的限制,并且如果您的限制不超出范围,则不会达到任何例外。(i> arraydict.count)

[self loadDataFromDB]返回一个数组,该数组在方法调用结束时被划分,因为该对象是在方法内创建的。因此,复制返回的数组就可以做到了。

[[self loadDataFromDB] copy]

最新更新