2011-09-10 205 views
0

如何比較兩個NSArrays,以便我可以刪除兩個陣列中都不包含的所有內容。比較兩個NSArrays

我想它是這樣的:

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」

我做錯了什麼?還是有更簡單的方法來解決我的問題? 感謝您的幫助

回答

5

這是因爲你創建一個NSMutableArray的副本(不可變),讓你失去了可變的能力。使用mutableCopy方法代替。

順便說一句,你有很大的內存問題。您的array1array2變量是自動釋放的對象。釋放它們會導致你遇到問題。

您只需要釋放使用alloc,copymutableCopy創建的陣列。

+0

感謝幫助。並感謝提醒。我總是忘記所有這些memoryManagement的東西......應該用Java寫xD – raemaerne

+0

我知道這是一個老問題。但我認爲它令人困惑,即調用mutableArray上的副本創建一個immutableArray。複製應該返回相同類型的副本。 – eyeballz

0

here,你應該使用addObjectsFromArray而不是arrayWithArray,因爲你是填充一個NSMutableArray

NSMutableArray *myMutableArray = [NSMutableArray addObjectsFromArray:array1]; 
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); 

OUTPUT: ARRAY3 :( 1,)

注:從一次的NSArray不可改變created.its u能不除去任何對象。

that's y we have used mutable NSMutableArray