OStack程序员社区-中国程序员成长平台

标题: ios - 按开始日期过滤 NSMutableArray 对象 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 01:26
标题: ios - 按开始日期过滤 NSMutableArray 对象

我正在开发一个 iOS 应用程序,我有一个 NSMutableArray 对象,对象是具有开始日期和结束日期的事件。 开始日期是时间戳格式,结束日期不是。

我想根据用户输入的日期过滤该数组 (datePicker)。

现在我有这个代码,它部分工作,因为假设一个事件将从 3 月 30 日开始,到 4 月 2 日结束,如果用户输入 3 月 30 日之前的任何日期,那么该事件将出现在我的列表中(没关系)但是如果用户输入让我们说 3 月 31 日,则不会过滤相同的事件,这是错误的,因为该事件直到发生。

if(datePickerInTimeStamp>0)
    {
        //I know I might use while instead of an if 
        for (EventObj *_eventObj in eventsList)
        {

            if(_eventObj.dateDebutTimeStamp>0){

                if ( datePickerInTimeStamp <= _eventObj.dateDebutTimeStamp)

                    [self._filteredListCaleventsList addObject:_eventObj];


            }
        }
    }

我正在考虑将结束日期转换为时间戳并使用某种范围检查。

感谢您的帮助。



Best Answer-推荐答案


我不是 100% 清楚您希望过滤器过滤什么,但这里有一些建议:

  1. 使用面向对象设计。教您的事件表明它们是否匹配。
  2. 使用 NSDate 比较方法 earlyDate: 和 laterDate:

我从您的问题中猜测您想要选择在用户选择的日期发生的事件:

// in your class EventObj.m

// answer true if date is between the event start and end
- (BOOL)isOccurringOnNSDate *)date {
    return [self.start == [self.start earlierDate:date]] &&
           [self.end == [self.end laterDate:date]];
}

如果您想过滤一些其他对事件来说很自然的方式,例如开始之前、之后开始、之前结束等,这里的 BOOL 回答方法就是这样做的方法。

现在您的 EventObj 做了一些有意义且易于阅读的事情,并且您的循环也更漂亮了:

// get NSDate *selectedDate from user
// using your var names, though the _underscores are strange ...

for (EventObj *_eventObj in eventsList) {
    if ([_eventObj isOccurringOn:selectedDate]) {
        [self._filteredListCaleventsList addObject:_eventObj];
    }
}

关于ios - 按开始日期过滤 NSMutableArray 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15275988/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4