NSMutableSet contains Duplicates

У меня есть собственный класс под названием card , и мне нужно создать набор из 10 уникальных карт из массива карт случайного размера. Кроме того, мне нужно сначала включить любые карты из белого списка, чтобы убедиться, что они всегда включены.

Моя проблема в том, что карточки из белого списка (и только из белого списка) потенциально дублируются в наборе. Карты, добавленные случайным образом, никогда не дублируются, и счет всегда правильный (10). Я не могу понять, почему isEqual иногда работает, но не всегда.

Здесь я создаю набор ( random - это массив потенциальных карт, из которых нужно выбрать):

NSMutableSet *randomCards = [NSMutableSet setWithCapacity:10];

[randomCards addObjectsFromArray:whiteListArray];

while ([randomCards count] < 10) {
    NSNumber *randomNumber = [NSNumber numberWithInt:(arc4random() % [randoms count])];
    [randomCards addObject:[randoms objectAtIndex:[randomNumber intValue]]];
}

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

- (BOOL)isEqual:(id)other {

if (other == self)
    return YES;
if (!other || ![other isKindOfClass:[self class]])
    return NO;
return [self isEqualToCard:other];

}

- (BOOL)isEqualToCard:(Card *)myCard {

if (self == myCard) {
    return YES;
}
if ([self cardName] != [myCard cardName] && ![(id)[self cardName] isEqual:[myCard cardName]])
    return NO;

return YES;
}

Кажется, он работает отлично, за исключением случаев, когда я добавляю карточки в белый список, я не могу понять, как я получаю дубликаты (но не более двух копий) .

5
задан hokiewalrus 28 February 2012 в 19:15
поделиться