Я работаю с NSArray
и NSMutableArray
s, которые хранят NSDate
объектов за несколько дней. Я заметил, что вызов [listOfDates removeObject:date1]
удаляет все объекты NSDate
из массива. Вместо этого я удалял объекты:Как удалить объекты NSDate из NSMutableArray
NSMutableArray *dateList; // Has Dates in it
NSDate *dateToRemove; // Date Object to Remove
__block NSUInteger indexToRemove;
__block BOOL foundMatch = NO;
[dateList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isEqualToDate:dateToRemove]) {
indexToRemove = idx;
foundMatch = YES;
*stop = YES;
}
}];
if (foundMatch) {
[dateList removeObjectAtIndex:indexToRemove];
}
Есть ли лучший способ сделать это? Возможно, другая структура данных? Или более простая функция?
Если у вас есть реальный объект из массива (по сравнению с копией), используйте 'removeObjectIdenticalTo: '. В противном случае 'removeObjectAtIndex:'. –
Я прочитал его, Он гласит: «Таким образом, совпадения определяются на основе ответа объекта на isEqual: message'. Я думаю, что моя проблема - объекты NSDate. Реализация isEqual не смотрит на дату, хранящуюся в объекте. Поэтому мне интересно, есть ли другие решения, которые люди использовали. – Ryan
Ваша проблема в том, что объекты NSDate DO реализуют isEqual, и у вас есть несколько одинаковых объектов NSDate в массиве. –