如何在.plist中查找特定值然后检索匹配项

时间:2014-03-09 20:09:06

标签: ios objective-c plist

正如标题所暗示的那样,我的.plist文件采用这种格式 - 我不知道如何标记它以便您阅读。 Stackoverflow不理解格式。

root (array)
         Item 0 - Dict
                numberOfPerson String
                recipeName  String
                recipeIngredients String
          Item 1 -Dict
                NumberOfPerson String
...

我有一个用户的文本字段,用户将输入几个字符串。

我想查找每个项目的输入和recipeIngredients的匹配项。

当发现它时,我想在我实施的tableview中找到那个单元格。

我怎样才能做到这一点。

这是我到目前为止所尝试的

NSString *path = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];
NSArray *arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];

这结果没用,我不能使用objectForKey

 for (int i=0; i<2; i++) {

           recipeIngredientsArray = [[arrayOfPlist objectAtIndex:i]                      objectForKey:@"recipeIngredients"];

}

这对我没有帮助,或者我不能保持良好的isequl方法

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您有一系列要过滤的词典。看看使用indexesOfObjectsPassingTest:。在数组上运行此命令并测试传递的字典以检查recipeIngredients值的值。

NSIndexSet *indexes = [arrayOfPlist indexesOfObjectsPassingTest:^BOOL (NSDictionary *obj, NSUInteger idx, BOOL *stop) {
    return [obj[@"recipeIngredients"] rangeOfString:input options:NSCaseInsensitiveSearch].location != NSNotFound;
}];

然后您可以使用indexes查看是否有任何匹配并显示它们。或者,您可以使用filteredArrayUsingPredicate:直接过滤数组:

NSArray *results = [arrayOfPlist filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"recipeIngredients CONTAINS[cd] %@", input]];

然后在表格视图中仅显示已过滤的结果。