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

ios*_*cks 16 arrays objective-c nsmutablearray ios

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

这是我目前的功能:

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

    if (![myMutableArray containsObject:parameter]) {

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

    } else {

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

    }
}
Run Code Online (Sandbox Code Playgroud)

Roh*_*wal 31

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

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


Dar*_*hah 17

if (![arrList containsObject:arrObj]) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

containsObject:


Nir*_*rav 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

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