2014-02-13 2 views
2

Мне нужно управлять этой уродливой структурой xml. Как я могу запросить все ключевые теги, начинающиеся с/содержит «Ключ»?NSPredicate получить значения NSDictionary, выбрав Keys с Beginswith

Xml-Структура:

<Data> 
    <Rec> 
     <Key1>0001</Key1> 
     <Key2>0015</Key2> 
     <Key3>0002</Key3> 
     <Key4>0022</Key4> 
     ...    
    </Rec> 
    <Rec> 
     <Key1>0015</Key1> 
     <Key2>0022</Key2> 
     <Key3>0002</Key3> 
     <Key4>0001</Key4> 
     ...    
    </Rec> 
    ... 
</Data> 

Rec-Объект-структура:

@interface Rec : NSObject 
@property (nonatomic, copy) NSMutableDictionary *content; 
@end 

Вот мой код, который работает, чтобы выбрать на Key1:

predicateRecs = [NSPredicate predicateWithFormat:@"content.%K == %@", @"Key1", @"0001"]; 

[result addObjectsFromArray:[recs filteredArrayUsingPredicate: predicateRecs]]; 

РЭК является Тип NSArray и содержит Rec - Objects. % K должен быть в состоянии сделать что-то вроде: [email protected] BEGINSWITH %@ == %@, @ "Key", @ "0001" `

Я хочу получить все ключи со значением, например. 0001 Как я могу это сделать?

Благодаря

+0

является что «' ** recs ** '« бит вашего «кода» отредактирован правильно? –

+0

нет, он должен быть выделен полужирным шрифтом. Я исправил это. – blub

+0

Вы пробовали это: 'predicateRecs = [NSPredicate predicateWithFormat: @" @ allValues ​​==% @ ", @" 0001 "];' – Lefteris

ответ

1

Я бы на основе ваших комментариев с помощью подзапроса затем:

predicateRecs = [NSPredicate predicateWithFormat:@"SUBQUERY(FUNCTION(SELF, 'allKeys'), $k, SELF[$k] beginswith[cd] %@ AND SELF[$k] == %@)[email protected] > 0", @"Key",@"0001"]; 

Dave Делонг мастер предикат: http://www.mactech.com/sites/default/files/Dave_DeLong-Power_Of_Predicates.pdf

и конечно: https://stackoverflow.com/a/5570510/312312

+0

спасибо, ваш запрос выглядит довольно хорошо, но когда я пытаюсь реализовать его в моей структуре Obj: ' [NSPredicate predicateWithFormat: @ "SUBQUERY (FUNCTION (content, 'allKeys'), $ k, content [$ k] начинается с [cd]% @). @ allValues ​​==% @ ", @" Key ", @" 0001 "];' i получает исключение: _NSUnknownKeyException ', reason:' [<__ NSArrayM 0x8aa01e0> valueForUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключа allValues.'_ Но контент является NSDictionary. Что я здесь делаю неправильно? Еще раз спасибо – blub

+0

Хм я сделал это неправильно, позвольте мне немного переосмыслить его – Lefteris

+0

Попробуйте отредактированный ответ и посмотрите, сработало ли это – Lefteris

Смежные вопросы