Как предсказать вложенные объекты IOS - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь предсказать, что значение вложенных объектов здесь является структурой вложенных объектов.

@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"
).

Любые предложения будут более оценены.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Удалить телефоны [0], так как ошибка говорит о том, что вы не можете использовать телефоны [0] APContact имеет ключевые телефоны.

Используйте строку ниже -

 NSPredicate *morningAttendees  = [NSPredicate predicateWithFormat:@"SELF.%K.%K MATCHES %@",@"phones",@"number", contact.phones[0].number];
0 голосов
/ 14 июня 2019

Заменить MATCHES на LIKE.

MATCHES предполагает, что ваш аргумент является регулярным выражением, LIKE предполагает, что ваш аргумент является строкой с подстановочными символами. source

Кроме того, при использовании вложенных предикатов используйте операторы ANY, SOME или ALL.

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