2012-06-20 112 views
0

我一直在使用NSArray s和NSMutableArray s,它們將NSDate對象存儲了幾天。我注意到調用[listOfDates removeObject:date1]會從陣列中刪除所有NSDate對象。我已經這樣做了,以刪除對象:如何從NSMutableArray中刪除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]; 
    } 

有沒有更好的方式來做到這一點?也許另一個數據結構?還是更簡單的功能?

+0

如果該數組中的實際對象(與副本),使用'removeObjectIdenticalTo: '。否則,'removeObjectAtIndex:'。 –

+0

我已經讀過它,它陳述'因此,匹配是根據對象對isEqual:消息的響應來確定的。我認爲我的問題是NSDate對象的isEqual實現不會查看存儲在對象中的日期時間。所以我想知道是否有其他解決方案的人使用。 – Ryan

+0

你的問題是,NSDate對象DO實現isEqual,並且你有多個相等的NSDate對象在數組中。 –

回答

0

你應該用你嘗試的第一個方法:

[listOfDates removeObject:date1]; 

這隻會DATE1從listOfDates刪除DATE1和。除非listOfDates中的所有NSDate對象都是date1,否則這不應從listOfDates中刪除所有NSDate對象。

您也可以使用removeObjectAtIndex:與indexOfObject:結合產生相同的效果,但這是額外的代碼。

NSMutableArray class referenceremoveObject

此方法使用indexOfObject:定位匹配,然後通過使用removeObjectAtIndex移除 他們:.因此,在 上確定匹配是對象對isEqual:消息的響應的基礎。如果 數組不包含anObject,則該方法不起作用(儘管其 的確會招致搜索內容的開銷)。

0

如果dateList中的所有日期都相等,removeObject不會只刪除一個,而是全部刪除。只刪除一個,較短的版本是獲得第一個索引,然後到該索引處移除對象:

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