Ios 比较NSArray中的NSString日期键

Ios 比较NSArray中的NSString日期键,ios,objective-c,ibaction,Ios,Objective C,Ibaction,我想知道如何在Xcode中表示不匹配的日期值,例如,我有两个按钮,一个用于显示今天的事件,另一个用于显示将来的事件,我设法对加载今天事件的第一个按钮进行了编码,但我不知道如何对将来的事件进行编码,比如如何说“如果事件日期与日历上的日期不匹配,则加载这些事件” 下面是我的todaysEvents按钮的一些代码 @property (strong, nonatomic) NSArray *dateEvents; @end @implementation HomeViewController

我想知道如何在Xcode中表示不匹配的日期值,例如,我有两个按钮,一个用于显示今天的事件,另一个用于显示将来的事件,我设法对加载今天事件的第一个按钮进行了编码,但我不知道如何对将来的事件进行编码,比如如何说“如果事件日期与日历上的日期不匹配,则加载这些事件”

下面是我的todaysEvents按钮的一些代码

 @property (strong, nonatomic) NSArray *dateEvents;
 @end


 @implementation HomeViewController {
      NSArray *_events;
      NSArray *_dateEvents;
      NSMutableArray *displayedEvents;
 }



- (IBAction)todaysEvents:(id)sender {

     [_pendingOperations.downloadQueue cancelAllOperations];

     [displayedEvents removeAllObjects];

     NSDate *currDate = [NSDate date];
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
     [dateFormatter setDateFormat:@"dd-MM-YYYY"];
     NSString *dateString = [dateFormatter stringFromDate:currDate];


     [displayedEvents addObjectsFromArray:[_events filteredArrayUsingPredicate:[NSPredicate 
                       predicateWithBlock:^BOOL(Events * event, NSDictionary *bindings)
                       {
                            NSLog(@"%@ ?= %@", event.date , dateString);
                           return [event.date isEqualToString:dateString];
                       }]]];

     NSLog(@"%@", displayedEvents);

     [self.myTableView reloadData];
}

如果您试图简单地比较字符串,请使用以下代码:

if([string1 isEqualToString:string2])
{
     //The strings are equal, do something here
}
更新:由于您试图检查两个相等的字符串,只需添加not运算符(!)。如下所示:

 if(![string1 isEqualToString:string2])
{
     //The strings are equal, do something here
}

您已经创建了一个匹配今天日期的谓词。您正在使用日期格式化程序生成一个包含年月日的日期字符串,然后将今天日期的日期字符串与您的_events数组中的日期字符串相匹配,这不是一种非常灵活的方法,但它是有效的

如果您现在只想选择今天以外的日期,只需将您的predate更改为:

[displayedEvents addObjectsFromArray:[_events filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Events * event, NSDictionary *bindings)
{
  NSLog(@"%@ ?= %@", event.date , dateString);
  return ![event.date isEqualToString:dateString];
}
(我刚刚在返回语句中添加了一个“!”以匹配除今天之外的所有日期。)

如果您想匹配今天之后的所有日期(如您在文本中所建议的,未来日期),则需要更改匹配日期的方法。您需要使用NSCalendar,并且可能需要使用组件值为NSDayCalendarUnit的方法
components:fromDate:toDate:options:
,以及选项值为0(不换行)。这将允许您计算当前日期与数组中某个日期之间的天数差。您可以使用该值创建一个谓词,该谓词仅选择比当前日期至少大1天的日期


这应该足以让你解决你的问题。

你的代码有什么问题?你的问题还不清楚。你能提供更多关于你的问题是什么的细节,或者你试图实现什么的截图吗?@lead\u the\u zeppelin上面的代码没有问题,我只是想为将来写一些类似的东西但是我不知道如何表示事件日期与当前日历日期不匹配的情况,以便加载未来事件。@JamesFrost我只想为“未来事件”按钮编写类似于上述代码的代码,但我不知道如何表示事件日期与当前日历日期不匹配的情况日历日期,以便加载未来事件..我不想简化,我只是想问如何表示这样一种情况,即字符串1的值是一个日期,而字符串2的值也是一个日期!!这正是这段代码所做的,而不是string1和string2将它们更改为您的dates.那么,你是说我也必须更改匹配今天事件日期的方法,还是只更改未来事件的方法?因为我已经将EventDate声明为NSString,如果我要按照你的方式执行,那么我必须将EventDate转换为NSDate,或者我可以更改匹配今天事件的方法UIButton!!从你的代码看例如,您的日期在内部存储为NSDates。这很好。如果您想进行范围计算(例如,所有日期都晚于今天)然后,是的,您需要将代码更改为不使用字符串,而是使用我概述的方法来计算NSDates之间的天数差异。好的,我知道了,但我是否仍要使用上面的谓词函数?还有一些我不知道的事..如何为选择日期的谓词编写函数1比当前日期大一天?好的,请阅读NSCalendar、NSDateComponents和方法组件:fromDate:toDate:options:是的,我正在尝试获取它们,但您尚未回答我的问题,我是否仍可以对组件使用上述谓词函数:fromDate:toDate:options:?