需要编写一个谓词来搜索核心数据对象的数组属性中的日期(在我的情况下是日期数组)

时间:2015-07-07 15:49:00

标签: core-data nspredicate nsfetchrequest

我需要使用Core Data获取对象。该对象有一个属性datesArray(存储为NSData的NSDate对象数组),我用它来存储日期数组。我需要检查数组是否包含今天的日期,然后使用该对象。

NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSError * error;
NSArray * fetchedArray = [context executeFetchRequest:request error:&error];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"entity.datesArray CONTAINS  %@",[NSDate date]];
for (MyEntity * entity in fetchedArray) {
    NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:entity.datesArray];
    [array filterUsingPredicate:predicate];
    if (array.count >0) {
        [_myMutableArray addObject:entity];
    }
}

1 个答案:

答案 0 :(得分:0)

你真的不应该像这样存储日期。您正在失去使用Core Data的价值。如果你有一个东西的数组,那么它应该在一个关系的另一面,然后你可以从底层的持久存储中有效地检索。

我怀疑你的谓词缺乏精确性,因为日期对象低至纳秒。如果你想要匹配“今天”的东西,那么你需要处理精度较低的东西。也许是特定格式的字符串或将其存储为数字,然后在范围内搜索(小于X且大于Y类型的搜索)。

同样,将实际日期存储在托管对象中会使这个问题变得更加容易,但您仍然需要处理精度问题。