Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如果目标是可变的,而源是不可变的,如何添加ObjectsFromArray?_Objective C_Nsmutablearray_Nsarray - Fatal编程技术网

Objective c 如果目标是可变的,而源是不可变的,如何添加ObjectsFromArray?

Objective c 如果目标是可变的,而源是不可变的,如何添加ObjectsFromArray?,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,如果我在NSMutableDictionary“categorize”中有一个可变数组“codes” 我在NSDictionary“templateCategorize”中添加了另一个不可变数组“templateCodes”中的对象 代码数组是否因为我从不可变数组(templateCodes)复制了元素而变为“不可变” 此代码在第一次复制对象时起作用,但在第二次执行此代码时,我收到一个错误,即“addObjectsFromArray”选择器无效,表明数组是不可变的。来自Apple文档中的NSCo

如果我在NSMutableDictionary“categorize”中有一个可变数组“codes”

我在NSDictionary“templateCategorize”中添加了另一个不可变数组“templateCodes”中的对象

代码数组是否因为我从不可变数组(templateCodes)复制了元素而变为“不可变”


此代码在第一次复制对象时起作用,但在第二次执行此代码时,我收到一个错误,即“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);