如何谓词嵌套对象 ios



我试图在这里谓词嵌套对象值是嵌套对象的结构。

@interface APContact : NSObject
@property (nullable, nonatomic, strong) NSArray <APPhone *> *phones;
@end
@interface APPhone : NSObject
@property (nullable, nonatomic, strong) NSString *number;
@end

我正在尝试像下面的代码块所示进行这样的谓词。我想谓词number字符串。如何做到这一点

for (APContact *contact in duplucateDataArray) {
    NSMutableArray *countArray = [[NSMutableArray alloc] init];
    NSPredicate *morningAttendees  = [NSPredicate predicateWithFormat:@"SELF.%K.%K MATCHES %@",@"phones[0]",@"number", contact.phones[0].number];
    NSArray <APContact*> *predicateContact = [duplucateDataArray filteredArrayUsingPredicate:morningAttendees];
    NSLog(@"predicate contact%@",predicateContact);
}

在运行上面的代码时,得到下面的异常

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<APContact 0x2824da6d0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key phones[0].'
 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't do regex matching on object (
    "+91 88815 12534"
).

任何建议将不胜感激。

删除电话[0],因为错误说你不能使用电话[0] APContact有钥匙电话。

使用下面的行 -

 NSPredicate *morningAttendees  = [NSPredicate predicateWithFormat:@"SELF.%K.%K MATCHES %@",@"phones",@"number", contact.phones[0].number];

MATCHES替换为 LIKE

MATCHES假设您的参数是正则表达式,LIKE假设您的参数是带有通配符的字符串。

此外,使用嵌套谓词时,请使用ANYSOMEALL运算符。

NSPredicate *morningAttendees  = [NSPredicate predicateWithFormat:@"ANY phones.number LIKE %@",contact.phones[0].number];

最新更新