Мне нужно выбрать истории из массива NSArray XML, сопоставив строку из элемента XML со списком строк в другом массиве NSArray.
XML содержит истории, каждая история имеет три критерия, например «Фрукты», «Вегетарианские овощи», «Приправы», каждый из которых содержит одну фразу. Примерная история может выглядеть так:
<story>
<title>I love cooking</title>
<fruit>Oranges</fruit>
<veg>Cauliflower</veg>
<spice>Mixed spice</spice>
<blurb>losts of text and stuff....</blurb>
</story>
У меня есть три словаря пар ключ / значение в NSMutableDictionary, созданном из pList
<Fruit:dictionary>
'Ripe bananas' : 1
'Green bananas' : 0
<Veg:dictionary>
'Green beans' : 1
'Cauliflower' : 0
<Spice:dictionary>
'Nutmeg' : 1
'Mixed spice' : 0
Я не знаю, какие будут ключи, и мне нужно сопоставить тег в истории с ключами.
например, тег фруктов истории: «Спелые бананы» СООТВЕТСТВУЮТ «Спелым бананам» в списке ключевых фруктов.
Я могу построить три массива ключей, используя
NSMutableDictionary *fruitTagsDict = [prefsDictionary objectForKey:@"Fruits"];
NSArray *fruitTags = [fruitTagsDict allKeys];
Я просматриваю историю XML, извлекая тег
for (id myArrayElement in storyArray) {
NSString *fruitString = [NSString stringWithString:[myArrayElement fruit]];
//BOOL isTheObjectThere = [issueTags containsObject:fruitString];
NSString *vegString = [NSString stringWithString:[myArrayElement veg]];
NSString *spiceString = [NSString stringWithString:[myArrayElement spice]];
//if ([[fruitTags objectAtIndex:row] isEqualToString:fruitString]) {
//NSLog(@"Yo %@", fruitString);
// ADD TO A NEW ARRAY OF MATCHING STORIES
//}
// Fails because row is undeclared
}
Затем я начинаю тускнеть.
Строка isTheObjectThere производит nil, а затем вылетает в конце цикла
Я посмотрел на: Отфильтровать целые словари NS из NSArray на основе нескольких ключей Проверка кода, чтобы увидеть, соответствует ли текст в текстовом поле какой-либо из строк в массиве NSArray
Кажется, что предикат - это ответ, но, честно говоря, я запутался.
Что мне нужно сделать в метакоде
repeat with stories
if storyFruitTag is in fruitTagArray
OR storyVegTag is in vegTagArray
OR storySpiceTag is in spiceTagArray
Add to new array of matching stories
Надеюсь, я объяснил достаточно, чтобы получить некоторые указатели, я изучил NSMutableSet и Intersect (Xcode: Сравните два NSMutableArrays) но сила слишком большого количества информации попала в меня