从NSMutableArray中删除也包含在另一个NSMutableArray中的对象

时间:2015-09-22 23:02:47

标签: ios objective-c nsmutablearray

我有两个$(".overlay").hide(); $(".item").click(function(){ var numitem = $(this).index()+1; $(".overlay").show(); window.location.href = $(this).find(".overlay").attr("href"); alert(numitem); }); ,名为arrayarray1。我想从array2中移除array1中可以在两个数组中找到"nameId"键的值的每个对象。实际上我是在for loop中尝试的,但它没有意义。它不会崩溃,它只是简单地调用else statement中的日志,我不明白为什么会发生。也许有人可以告诉我正确的解决方案。

NSMutableArray *newArray = [self.array1 mutableCopy];

for (PFObject * object in newArray) {

    PFObject *placeholderObject = object;

    for (PFObject *object2 in self.array2) {

        if ([placeholderObject[@"nameId"] isEqualToString:object2[@"nameId"]]) {

            [self.array1 removeObject:object];

            NSLog (@"EXISTING OBJECT FOUND %@", object);
        } else {


            NSLog(@"UNIQUE OBJECT FOUND %@", idO[@"hirCime"]);

        }


    }


}

1 个答案:

答案 0 :(得分:0)

创建数组的mutableCopy时,您创建一个新数组,其中包含每个对象的副本,但它们不是相同的,因此objectnewArray的成员但是不是self.array1的成员,因此您无法将其从该数组中删除。

这应该有效:

// Creates a new empty mutable array
NSMutableArray *newArray = [@[] mutableCopy]; 

for (PFObject *object in self.array) {

    BOOL found = NO;

    for (PFObject *object2 in self.array2) {

        if ([object[@"nameId"] isEqualToString:object2[@"nameId"]]) {
            found = YES;
            NSLog (@"EXISTING OBJECT FOUND %@", object);
            break;

        } else {
            NSLog(@"UNIQUE OBJECT FOUND %@", idO[@"hirCime"]);
        }
    }

    if (!found) {
        [newArray addObject:[object copy]];
    }
}

// And maybe you want this 
self.array = newArray;