我正在开发一个 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-推荐答案 strong>
我不是 100% 清楚您希望过滤器过滤什么,但这里有一些建议:
- 使用面向对象设计。教您的事件表明它们是否匹配。
- 使用 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/
|