【问题标题】: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 并使用谓词过滤数组,使用费用模型,可以使用属性进行过滤。但恐怕这不是最好的方法。

标签: core-data properties entity nspredicate


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多