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"]; 

我应该如何纠正我的谓词查询属性在ItemSubItem中

我认为这不能与-predicateWithFormat:两个聚合级别。 在每个级别上,您可以有ANYALL聚合。 所以“正确”的语法将是ANY items ANY subitems.… = …ANY items ALL subitems.…= …"或…

您可以尝试使用NSExpression手动构build谓词,可能使用子查询。

哦,你没有使用核心数据,我认为。 所以只需在循环中手动执行或使用计算属性即可。