我试图在这里谓词嵌套对象值是嵌套对象的结构。
@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
假设您的参数是带有通配符的字符串。
此外,使用嵌套谓词时,请使用ANY
、SOME
或ALL
运算符。
NSPredicate *morningAttendees = [NSPredicate predicateWithFormat:@"ANY phones.number LIKE %@",contact.phones[0].number];