如何从NSMutableArray中删除NSDate对象

时间:2012-06-20 21:12:44

标签: objective-c cocoa nsmutablearray nsarray

我一直在使用NSArrayNSMutableArray来存储NSDate个对象几天。我注意到调用[listOfDates removeObject:date1]会从数组中删除所有NSDate个对象。相反,我这样做是为了删除对象:

  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];
  }

有更好的方法吗?也许另一种数据结构?还是一个更简单的功能?

2 个答案:

答案 0 :(得分:0)

您应该使用您尝试的第一种方法:

[listOfDates removeObject:date1];

这将从listOfDates中删除date1和ONLY date1。除非listOfDates中的所有NSDate对象都是listOfDates,否则不应从date1中删除所有NSDate对象。

你也可以使用removeObjectAtIndex:结合indexOfObject:产生相同的效果,但这是额外的代码。

来自removeObject的{​​{3}}:

  

此方法使用indexOfObject:来查找匹配项,然后删除   他们通过使用removeObjectAtIndex:。因此,确定匹配   对象对isEqual:消息的响应的基础。如果   array不包含anObject,该方法没有效果(尽管它   确实会产生搜索内容的开销。)

答案 1 :(得分:0)

如果dateList中的所有日期都相同,removeObject将不会只删除一个日期,而是删除所有日期。要仅删除一个,较短的版本是获取第一个索引,然后删除该索引处的对象:

NSUInteger indexToRemove = [dateList indexOfObject:dateToRemove];
if (indexToRemove != NSNotFound) {
    [dateList removeObjectAtIndex:indexToRemove];
}