如何对实体的自定义属性进行谓词

Posted

技术标签:

【中文标题】如何对实体的自定义属性进行谓词【英文标题】:How to make predicate to Entity's customized property 【发布时间】:2013-05-17 13:42:50 【问题描述】:

这个问题是my previous question 的一个持续问题。

我想通过我的自定义属性做一个谓词来过滤实体,这是实体类

@interface Expense : NSManagedObject

@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSNumber * amount;
@property (nonatomic, retain) NSString * category;
@property (nonatomic, retain) NSString * note;
@property (nonatomic, retain) NSString * paidby;

//customized property
@property (readonly) int year;
@property (readonly) int month;
@property (readonly) NSString *yyyy_mmm;
@property (readonly) NSString *mm_yyyy;

@end

这是我的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"yyyy_mmm == %@", header];

运行时:

错误消息 NSInvalidArgumentException',原因:'keypath yyyy_mmm 在实体中找不到

这并不完全出乎意料,我搜索并发现它与键值,侦听器有关。但我不知道具体该怎么做。

任何帮助将不胜感激,顺便说一句,编码块有问题,请见谅。

【问题讨论】:

(基于 SQLite 的)Core Data 获取请求的谓词只能使用 persistent 属性,不能使用临时属性,也不能使用自定义属性。 简单地说,yyyy_mmm 在您的模型中不存在,正如 Martin 所述。 @flexaddicted 我想选择特定年份和月份的所有费用。现在我知道该怎么做了,我选择并将所有数据保存到 NSArray 并使用谓词过滤数组,使用费用模型,可以使用属性进行过滤。但恐怕这不是最好的方法。 【参考方案1】:

将您需要在谓词中使用的任何属性设置为数据模型中实体的实际键。如果您可以直接设置该值,那就太好了。如果不是,您要么实现willSave,要么使用KVO,并根据实体中的其他值更新谓词键值。

【讨论】:

以上是关于如何对实体的自定义属性进行谓词的主要内容,如果未能解决你的问题,请参考以下文章

实体模型上的自定义吸气剂?

如何从 Java 中的自定义谓词列表中创建一个谓词?

使用自定义谓词对 numpy 数组进行排序

如何在 Swift 3 中将自定义类保存为 CoreData 实体的属性?

CoreData 的自定义 UID 数据类型

如何使用 JPA 和 Hibernate 通过自定义对象实体属性进行查询