2015-08-28 72 views
2

我有如下結構的對象:Transaction有一個Items數組。項目有子項的數組NSArray的NSArray中的對象的屬性的NSPredicate

@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 

我想創建謂詞找到和子項目NSArray的交易

pred = [NSPredicate predicateWithFormat: 
        @"ANY SELF.%K.%K.%K contains %@", 
        @"items", 
        @"subitems", 
        @"name", 
        @"MY_SUB_ITEM_NAME"]; 

價格這會產生下面的錯誤。

失敗:抓好 「NSInvalidArgumentException」, 「不能做正則表達式匹配的對象( MY_SUB_ITEM_NAME) 。」

但是,當我使用類似的格式來查找交易中的屬性。它工作正常。

pred = [NSPredicate predicateWithFormat: 
        @"SELF.%K LIKE %@", 
        @"identifier", 
        @"TX001"]; 

我應該如何改正我的謂語項目子項目

+0

什麼是ID和「MY_SUB_ITEM_NAME」?我沒有在子項中找到任何字段,例如id –

+0

'My_SUB_ITEM_NAME'是比較的值。它與物業無關。 –

+0

對不起,我的錯誤輸入'id'。它應該是'名字'。 –

回答

1

查詢屬性,我認爲有-predicateWithFormat:兩個聚合級別無法正常工作。在每個級別,你可以有一個ANYALL聚合。所以「正確」的語法是ANY items ANY subitems.… = …。或者ANY items ALL subitems.…= …"或...

您可以嘗試使用NSExpression手動構建謂詞,可能使用子查詢。

哦,你沒有使用核心數據,我認爲。因此,只需在循環中手動執行或使用計算屬性即可。