Obj C - NSMutableArray containsObject возвращает true - PullRequest
0 голосов
/ 12 марта 2020

NSMutableArray containsObject возвращает true, даже если адрес и данные разные.

Я видел этот пост NSMutableArray containsObject возвращает true, но он не должен уже, но все же я ' я не могу найти свое решение:

Ниже приведен мой сценарий:

    NSMutableArray *destClasses = [NSMutableArray array];
    id sourceClasses = [dict objectForKey:@"Classes"];
    if ([sourceClasses isKindOfClass:[NSArray class]]) {
                for (NSDictionary *class in sourceClasses) {
                    MyClass *a = [[MyClass alloc] init];
                    [a arrangeClassWithDictionary:classDict]; //this methods assigns value to a from classDict
                    if (![destClasses containsObject:a]) {
                        [destClasses addObject:a];
                    }
                }
            }

В первой итерации destClasses добавляет объект MyClass, а во второй итерации [destClasses containsObject:a] возвращает true хотя a имеет другой адрес и назначены разные значения.

Что я здесь не так делаю. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 марта 2020

Я получил ответ.

containsObject: который отправляет сообщение isEqual: каждому объекту, который он содержит с вашим объектом в качестве аргумента. Он не использует ==, если реализация isEqual: не опирается на ==.

Я должен переопределить метод isEqual:, чтобы обеспечить проверку на равенство для моих полей объекта, как показано ниже,

- (BOOL)isEqual:(id)object
{
    BOOL result = NO;

    if ([class isKindOfClass:[self class]]) {
        MyClass *otherObject = object;
        result = [self.name isEqualToString:[otherObject name]];
    }

    return result;
}
...