Objective c 如果目标是可变的,而源是不可变的,如何添加ObjectsFromArray?
如果我在NSMutableDictionary“categorize”中有一个可变数组“codes” 我在NSDictionary“templateCategorize”中添加了另一个不可变数组“templateCodes”中的对象 代码数组是否因为我从不可变数组(templateCodes)复制了元素而变为“不可变”Objective c 如果目标是可变的,而源是不可变的,如何添加ObjectsFromArray?,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,如果我在NSMutableDictionary“categorize”中有一个可变数组“codes” 我在NSDictionary“templateCategorize”中添加了另一个不可变数组“templateCodes”中的对象 代码数组是否因为我从不可变数组(templateCodes)复制了元素而变为“不可变” 此代码在第一次复制对象时起作用,但在第二次执行此代码时,我收到一个错误,即“addObjectsFromArray”选择器无效,表明数组是不可变的。来自Apple文档中的NSCo
此代码在第一次复制对象时起作用,但在第二次执行此代码时,我收到一个错误,即“addObjectsFromArray”选择器无效,表明数组是不可变的。来自Apple文档中的NSCopying协议: 讨论 返回的对象由负责释放它的发送者隐式保留。如果考虑“不可变与可变”适用于接收对象,则返回的副本是不可变的;否则,副本的确切性质由类决定
我不认为它应该使可变数组不可变——可变数组可以包含不可变对象,因此从另一个数组添加对象不应该使其不可变。此代码工作正常:
NSArray *theData = [NSArray arrayWithObjects:@"One",@"Two",@"Three",nil];
NSMutableArray *mut = [NSMutableArray arrayWithObjects:@"Four",@"Five",@"Six",nil];
[mut addObjectsFromArray:theData];
NSLog(@"%@",mut);
NSLog(@"%@",[mut class]);
[mut addObject:@"seven"];
NSLog(@"%@",mut);
您的代码中一定有我看不到的其他内容。代码数组是否因为我从不可变数组(templateCodes)复制了元素而变为“不可变”?不,还有点问题,谢谢。最终很难追踪到,但这与存在多个阵列并确保某些阵列被复制有关。似乎有指向导致问题的数组元素的“悬空”指针。
[codes addObjectsFromArray:(NSArray*)[templateCategorize objectForKey:@"templateCodes"]];
NSArray *theData = [NSArray arrayWithObjects:@"One",@"Two",@"Three",nil];
NSMutableArray *mut = [NSMutableArray arrayWithObjects:@"Four",@"Five",@"Six",nil];
[mut addObjectsFromArray:theData];
NSLog(@"%@",mut);
NSLog(@"%@",[mut class]);
[mut addObject:@"seven"];
NSLog(@"%@",mut);