如何比较两个NSArray,以便删除两个数组中没有的所有内容。
我试过这样:
NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"1",@"2",@"5",@"6", nil];
NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:array1];
NSMutableArray *myMutableArrayTwo = [myMutableArray copy];
[myMutableArray removeObjectsInArray:array2];
[array1 release];
[array2 release];
NSArray *array3 = [myMutableArray copy];
[myMutableArrayTwo removeObjectsInArray:array3]; // Error here: "SIGABRT"
NSLog(@"array3:%@",myMutableArrayTwo);
但由于错误,它无效。它是:“ - [__ NSArrayI removeObjectsInArray:]:无法识别的选择器发送到实例0x4e51550”
我做错了什么?或者有更简单的方法来解决我的问题? 谢谢你的帮助
答案 0 :(得分:5)
这是因为您创建了NSMutableArray的副本(不可变),因此您正在丢失可变功能。
请改用mutableCopy
方法。
顺便说一下,你有很多内存问题。您的array1
和array2
变量是自动释放的对象。释放它们会引发问题。
您只需要发布使用alloc
,copy
或mutableCopy
创建的数组。
答案 1 :(得分:0)
根据here,您应该使用addObjectsFromArray
代替arrayWithArray
,因为您正在填充NSMutableArray
。
NSMutableArray *myMutableArray = [NSMutableArray addObjectsFromArray:array1];
答案 2 :(得分:0)
试试这个
NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"1",@"2",@"5",@"6", nil];
NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:array1];
NSMutableArray *myMutableArrayTwo = [myMutableArray mutableCopy];//mutable copy
[myMutableArray removeObjectsInArray:array2];
// u didn't use alloc,init,new,copy to create array1,array2.
// so u dont need to release it.because it is autoreleased object.
// [array1 release];
// [array2 release];
NSMutableArray *array3 = [myMutableArray mutableCopy];//mutable copy
[myMutableArrayTwo removeObjectsInArray:array3];
NSLog(@"array3:%@",myMutableArrayTwo);
<强>输出:强> ARRAY3 :( 1, 2 )
注意:创建后,你无法从NSArray中删除任何对象。不可变。
that's y we have used mutable NSMutableArray