如何对实体的自定义属性进行谓词
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
,并根据实体中的其他值更新谓词键值。
【讨论】:
以上是关于如何对实体的自定义属性进行谓词的主要内容,如果未能解决你的问题,请参考以下文章