【问题标题】:Need help creating dictionary from plist需要帮助从 plist 创建字典
【发布时间】:2011-10-16 06:25:07
【问题描述】:

我的 plist 中有以下格式:

我正在使用这段代码,它可以很好地提取所有 muscleName 并将它们设置为表格单元格的 textLabel:

    NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
    NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];
    self.muscleArray = rootLevel;
    cell.textLabel.text = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"muscleName"];

但现在我要添加一个搜索栏,我希望结果显示 exerciseName 以及相应的 muscleNamemusclePicture 键。

我尝试只做 [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exerciseName"]; 但这并没有得到任何东西

【问题讨论】:

  • 您是在所有肌肉中搜索,还是在一个肌肉词典中搜索?

标签: iphone objective-c cocoa-touch nsarray nsdictionary


【解决方案1】:
[[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exercises"] 

会给你一个 NSArray 保存两个字典(来自上面的数据),每个字典都保存一个字符串,用于键 exerciseName。你也可以这样做

[[[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exercises"] valueForKey:@"exerciseName"]

这将返回一个包含两个练习名称的 NSStrings 的 NSArray。

您的数据并没有真正以促进良好搜索的方式排列。您正在尝试在包含在数组中的字典中包含的数组中的字典中进行搜索!可能值得为搜索目的创建一个备用数组 - 可以这样做:

NSMutableArray *arrayForSearching = [NSMutableArray array];
for (NSDictionary *muscleDict in self.muscleArray)
    for (NSDictionary *excerciseDict in [muscleDict objectForKey:@"exercises"])
        [arrayForSearching addObject:[NSDictionary dictionaryWithValuesAndKeys:
            [exerciseDict objectForKey:@"exerciseName"],@"exerciseName",
            [muscleDict objectForKey:@"muscleName"],@"muscleName",nil]];

(在浏览器中输入,未经测试,如有错误请见谅!)

【讨论】:

  • 是的,如有必要,我可以从 plist 创建另一个数组。我要做的就是创建一个搜索练习名称的通用搜索。但是单元格也应该有 myscleName 作为它的详细文本,我也必须将它链接起来。
  • 您对创建用于搜索的新数组有任何见解吗?
  • 我会选择一系列字典,其中包含锻炼名称和肌肉名称。您将一遍又一遍地重复肌肉名称,但它只是一个字符串。您应该能够通过运行现有数组来相当轻松地构建它,如果您需要任何帮助,请告诉我。
  • 谢谢!所以我想我需要做一些枚举来遍历数组。你能帮忙设置一下吗?谢谢!
猜你喜欢
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2020-03-06
  • 2021-08-29
  • 1970-01-01
  • 2015-07-30
相关资源
最近更新 更多