在NSPredicate之间没有工作?

时间:2014-05-20 01:12:26

标签: ios core-data nspredicate

我有一个复合谓词系统来确定定时活动的实例是否在指定的时间范围内存在。当我跑步时,我收到了这个错误:

-[__NSDate constantValue]: unrecognized selector sent to instance

我使用这些关键字在SO和Google上搜索过相当多的内容,但没有找到明确的答案,但暗示了几种可能性:

1)BETWEEN谓词不适用于NSDates

2)BETWEEN谓词是一个聚合操作,而Core Data不支持聚合操作

3)问题是一些未指明的“低级”核心数据问题。

我相信代码写得正确,但我似乎无法找到崩溃的原因。我正在使用MagicalRecord,它记录了MR_符号。

提前感谢您的期待。所有帮助赞赏!我想知道我是否正走在这条死胡同的道路上。

以下是代码:

NSPredicate *aoiNamePredicate = [NSPredicate predicateWithFormat:@"name == %@",self.currentSpec.activityOfInterest];
NSPredicate *aoiEarlyTweenPredicate = [NSPredicate predicateWithFormat:@"startTime BETWEEN %@",[NSArray arrayWithObjects:self.currentSpec.fromDate, self.currentSpec.toDate, nil]];
NSPredicate *aoiLateTweenPredicate = [NSPredicate predicateWithFormat:@"stopTime BETWEEN %@",[NSArray arrayWithObjects:self.currentSpec.fromDate, self.currentSpec.toDate, nil]];

NSPredicate *aoiNameAndEarlyTweenPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:aoiNamePredicate,aoiEarlyTweenPredicate,nil]];
NSPredicate *aoiNameAndLateTweenPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:aoiNamePredicate,aoiLateTweenPredicate,nil]];

NSPredicate *aoiCountFinderFinalPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:aoiNameAndEarlyTweenPredicate,aoiNameAndLateTweenPredicate,nil]];



NSPredicate *bmaNamePredicate = [NSPredicate predicateWithFormat:@"name == %@",self.currentSpec.benchmarkActivity];
NSPredicate *bmaEarlyTweenPredicate = [NSPredicate predicateWithFormat:@"startTime BETWEEN %@",[NSArray arrayWithObjects:self.currentSpec.fromDate, self.currentSpec.toDate, nil]];
NSPredicate *bmaLateTweenPredicate = [NSPredicate predicateWithFormat:@"stopTime BETWEEN %@",[NSArray arrayWithObjects:self.currentSpec.fromDate, self.currentSpec.toDate, nil]];

NSPredicate *bmaNameAndEarlyTweenPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:bmaNamePredicate,bmaEarlyTweenPredicate,nil]];
NSPredicate *bmaNameAndLateTweenPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:bmaNamePredicate,bmaLateTweenPredicate,nil]];


NSPredicate *bmaCountFinderFinalPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:bmaNameAndEarlyTweenPredicate,bmaNameAndLateTweenPredicate,nil]];

int aOiCount = [TimedActivity MR_countOfEntitiesWithPredicate:aoiCountFinderFinalPredicate];

NSLog(@"AoiCount = %d", aOiCount);

int bmaCount = [TimedActivity MR_countOfEntitiesWithPredicate:bmaCountFinderFinalPredicate];

NSLog(@"bmaCount = %d", bmaCount);

编辑以回复“重复提问”断言:

作为重复提到的问题是类似的(我已经读过了,其他几个人也喜欢它),它确实有几个回复,但都没有解决问题。我说这不是一个重复的问题,至少不是一个有满意答案的问题。我希望有更明确的东西。

第二次编辑,回复@Martin R的评论

我想我的困惑之处在于我成功地将MagicalRecord聚合方法用于我的应用程序中的其他地方。因此,我做了(我认为合理的)假设,因为MagicalRecord正在处理繁重的Core Data提升,它也将处理这个问题。

此外,在this post,@ casademora说:

日期作为整数存储在封面下,谓词也会正确转换。

该评论以及链接文档引用OSX 10.4的事实足以让我认为日期应该在谓词中转换为可用的形式。

好的,我的立场得到了纠正,并感谢@Martin R.我应该删除这个问题,还是讨论证明对他人有用?

0 个答案:

没有答案