使用for和if语句的NSDate比较

时间:2013-07-19 19:49:48

标签: objective-c for-loop nsdate

我的应用程序正在尝试确定今天的日期是否在数组的开始日期和结束日期之间的对象之间,然后将从数组中删除该对象。代码成功地从数组中删除了对象,但只删除了所有其他对象(应删除所有对象)。

for (int i = 0; i < [AdDataArray count]; i++) {
    NSDate *dateStart = [self adStartDateAtIndex:i];
    NSDate *dateEnd = [self adEndDateAtIndex:i];
        if (([dateNow earlierDate:dateStart]) || ([dateNow laterDate:dateEnd]))
        {
        [AdDataArray removeObjectAtIndex:i];
        }
i++;
}

如果第二组眼睛可以查看我的代码,看看我做错了什么,那将非常感激!

2 个答案:

答案 0 :(得分:2)

问题在于你的循环计数器。您删除了一个项目,然后额外增加i

当我需要做类似类型的循环时,我会向后做:

for (NSUInteger i = AdDataArray.count; i > 0; i--) {
    NSDate *dateStart = [self adStartDateAtIndex:i - 1];
    NSDate *dateEnd = [self adEndDateAtIndex:i - 1];
    if (([dateNow earlierDate:dateStart]) || ([dateNow laterDate:dateEnd]))  {
        [AdDataArray removeObjectAtIndex:i - 1]; 
    }
}

AdDataArray.count转到> 0而不是AdDataArray.count - 1>= 0的原因是因为如果count为0,则使用count - 1原因自count未签名以来的换行。

答案 1 :(得分:0)

你有两个i++。删除最后一个。

for (int i = 0; i < [AdDataArray count]; i++) {
    NSDate *dateStart = [self adStartDateAtIndex:i];
    NSDate *dateEnd = [self adEndDateAtIndex:i];
    if (([dateNow earlierDate:dateStart]) || ([dateNow laterDate:dateEnd]))
    {
        [AdDataArray removeObjectAtIndex:i];
    }
}

来自developer.apple.com

  

为了填补空白,索引之外的所有元素都会通过减1来移动   从他们的索引。

实际上,您可能需要在i--语句中添加if,因为i即使您删除了元素也会自动被取消。