2015-12-15 4 views
1
matsDataObject *notebook1 = [matsDataObject dataObjectWithName:@"Notebook 1" children:nil]; 
matsDataObject *notebook2 = [matsDataObject dataObjectWithName:@"Notebook 2" children:nil]; 

matsDataObject *computer1 = [matsDataObject dataObjectWithName:@"Computer 1" 
                 children:[NSArray arrayWithObjects:notebook1, notebook2, nil]]; 
matsDataObject *computer2 = [matsDataObject dataObjectWithName:@"Computer 2" children:nil]; 
matsDataObject *computer3 = [matsDataObject dataObjectWithName:@"Computer 3" children:nil]; 

matsDataObject *computer = [matsDataObject dataObjectWithName:@"Computers" 
                children:[NSArray arrayWithObjects:computer1, computer2, computer3, nil]]; 

Это мой NSObject:IOS NSObject глубокий ребенок фильтрации с NSPredicate

Компьютеры имеет название "компьютеры" и дети "NSArray со значениями Компьютер 1, Компьютер 2 и компьютер 3"

Компьютер 1 имеет название «Компьютер 1» и дети «NSArray со значениями Notebook 1 и 2 Notebook»

прогиб NSPredicate Я хочу, чтобы получить родительский объект «Компьютеры» при поиске «Notebook 1»

Что я пробовал:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(children, $child, $child.children.name CONTAINS[cd] %@)[email protected] > 0",searchText]; 

и

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY children.children.name contains[cd] %@",searchText]; 
+0

Try 'детей. @ DistinctUnionOfArrays.children.name содержит [CD]% @' или 'подзапрос (дети, $ ребенок, ANY $ child.children.name СОДЕРЖИТ [кд]% @). @ Подсчитывать > 0'. – Willeke

+0

Да да да! Он работает, большое вам спасибо. Должен был опубликовать этот вопрос раньше, потратив на это 2 дня. –

ответ

0

Чтобы закрыть этот вопрос. Ответ исходит от Виллека.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY [email protected] contains[cd] %@",searchText];