这是名为"模型"的类的实现部分。在这里,我递归地调用最高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]