检查数组是否包含某个对象(iOS)

时间:2013-01-16 19:15:13

标签: ios objective-c arrays nsmutablearray

我需要检查某个数组是否包含某个对象,如果是,则删除该对象。如果它没有那个对象,则可以使用函数将其添加到数组中。问题是始终添加对象,因为check语句总是返回false。

这是我目前的职能:

- (void) myFunction:(NSString *)parameter {

    if (![myMutableArray containsObject:parameter]) {

        [myMutableArray addObject:parameter];
        NSLog(@"%@ added", parameter);

    } else {

        [myMutableArray removeObject:parameter];
        NSLog(@"%@ deleted", parameter);

    }
}

5 个答案:

答案 0 :(得分:31)

containsObject在数组中的每个对象上调用isEqual。你正在检查什么类型的对象?如果它是自定义对象,则覆盖并实现方法isEqual。

我猜你正试图检查对象的值,但containsObject实际上是在调用isEqual,它正在比较对象的引用,而不是它的实际值。

答案 1 :(得分:16)

if (![arrList containsObject:arrObj]) {
    // do something
}

containsObject:

答案 2 :(得分:7)

首先,您需要检查要在此myMutableArray中添加的类型数据或对象。根据您的方法,您正在检查已传递参数parameter的字符串类型的可变数组。您可能包含int或float数组。

您的数组中可能存在类型转换问题。如果您是STRING类型的数据,那么您可以使用其他方法。

- (void) myFunction:(NSString *)parameter {

for (int i = 0 ; i < [myMutableArray count ] ; i++) {


    if (![[myMutableArray objectAtIndex:i] isEqualToString:parameter]) {
        [myMutableArray addObject:parameter];
        NSLog(@"%@ added", parameter);
    }
    else{
        [myMutableArray removeObject:parameter];
        NSLog(@"%@ deleted", parameter);
    }
}

}

希望这会对你有所帮助。如果你的对象不是NSString的类型,那么你需要转换。

答案 3 :(得分:2)

您应该在自定义类中实现isEqual:。默认情况下,如果两个对象共享相同的引用,则它们只相同。

还要确保在使用之前初始化可变数组。

修改

您的数组的变量名称似乎很可能输入错误。

  • myMutableArray
  • myMutbaleArray

答案 4 :(得分:1)

您可能忘记初始化NSMutableArray。如果未初始化,则向addObject对象发送nil消息,该消息无效,并且该数组永远不会包含您之前添加的内容...

当然,如果数组是nil,那么contains检查将始终返回false。根据Objective-C文档:

  

如果方法返回一个对象,任何指针类型,任何整数标量   大小小于或等于sizeof(void *),浮点数,双数,长数   double或long long,然后发送给nil的消息返回0。

0是假的