【问题标题】:Filter Core Data results by property BETWEEN按 BETWEEN 属性过滤核心数据结果
【发布时间】:2015-12-29 06:35:44
【问题描述】:

我目前有 Core Data 成功返回了名为 Event 的特定实体的所有结果:

NSManagedObjectContext *context = [delegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event" 
                                                     inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];

NSError *error;
NSArray *fetchResults = [context executeFetchRequest:request error:&error];

现在在日历绘制时,我需要获取开始日期在本月或之前且结束日期也在本月或之后的事件。

我相信答案与 NSPredicate 有关,但我对它还不够熟悉,无法让它服从我的意愿。

【问题讨论】:

  • 请向我们展示您的尝试。
  • 您要登录以获取当前月份之间的数据吗?
  • @PetahChristian 这是谓词 NSPredicate *predicateClass = [NSPredicate predicateWithFormat:@"(field_start_date >= %@) AND (field_end_date

标签: ios objective-c core-data


【解决方案1】:

将条件改为谓词:

NSDate * firstDateOfMonth = [self returnDateForMonth:month year:year day:2];
NSDate * lastDateOfMonth = [self returnDateForMonth:month+1 year:year day:1];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(startDate => firstDateOfMonth) and (endDate <= lastDateOfMonth)”];

NSManagedObjectContext *context = [delegate managedObjectContext];

NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event"                                              inManagedObjectContext:context];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
[request setPredicate:predicate];

NSError *error;

NSArray *fetchResults = [context executeFetchRequest:request error:&error];

【讨论】:

  • 您的查询部分正确,因为它只会影响属于该月的那些开始结束日期,但假设一个事件开始于 2014 年 11 月并将结束于 2018 年 11 月,这种情况将不起作用...对吗?
  • 是的,到时候它就行不通了。您需要根据自己的要求修改该条件。
猜你喜欢
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2018-10-10
相关资源
最近更新 更多