NSArray的NSArray中的对象的属性的NSPredicate
我有一个像下面的结构的对象:事务有一个项目的数组。 Item有一个SubItems数组
@interface Transaction : NSObject @property (nonatomic, copy) NSString *id; @property (nonatomic, assign) NSInteger status; @property (nonatomic, strong) NSArray *items; // array of Item @end @interface Item : NSObject @property (nonatomic, copy) NSString *identifier; @property (nonatomic, assign) NSInteger price; @property (nonatomic, strong) NSArray *subitems; @end @interface SubItem : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) NSInteger price; @end
我想创build谓词从交易的NSArray中findSubitem的 名称和价格
pred = [NSPredicate predicateWithFormat: @"ANY SELF.%K.%K.%K contains %@", @"items", @"subitems", @"name", @"MY_SUB_ITEM_NAME"];
这会产生下面的错误。
失败:抓到“NSInvalidArgumentException”,“无法在对象(MY_SUB_ITEM_NAME)上进行正则expression式匹配”。
但是,当我使用类似的格式来查找交易中的属性。 它工作正常。
pred = [NSPredicate predicateWithFormat: @"SELF.%K LIKE %@", @"identifier", @"TX001"];
我应该如何纠正我的谓词查询属性在Item和SubItem中
我认为这不能与-predicateWithFormat:
两个聚合级别。 在每个级别上,您可以有ANY
或ALL
聚合。 所以“正确”的语法将是ANY items ANY subitems.… = …
或ANY items ALL subitems.…= …"
或…
您可以尝试使用NSExpression
手动构build谓词,可能使用子查询。
哦,你没有使用核心数据,我认为。 所以只需在循环中手动执行或使用计算属性即可。