Сравните два NSArrays - PullRequest
       22

Сравните два NSArrays

0 голосов
/ 10 сентября 2011

Как я могу сравнить два 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"

Что я сделал не так?Или есть более простые способы решить мою проблему?Спасибо за помощь

Ответы [ 3 ]

5 голосов
/ 10 сентября 2011

Это потому, что вы создаете копию (неизменяемую) NSMutableArray, поэтому вы теряете изменяемые возможности.

Вместо этого используйте метод mutableCopy.

Кстати, у вас огромные проблемы с памятью. Ваши переменные array1 и array2 являются автоматически выпущенными объектами. Освобождение их приведет к проблемам.

Вам нужно только освободить созданные вами массивы с alloc, copy или mutableCopy.

0 голосов
/ 10 сентября 2011

Попробуйте это

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
0 голосов
/ 10 сентября 2011

Согласно здесь , вы должны использовать addObjectsFromArray вместо arrayWithArray, так как вы заполняете NSMutableArray.

NSMutableArray *myMutableArray = [NSMutableArray addObjectsFromArray:array1];
...