【问题标题】:Display value from dictionary after using NSPredicate使用 NSPredicate 后显示字典中的值
【发布时间】:2011-09-10 02:07:09
【问题描述】:

我目前正在使用 NSPredicate 搜索某个键在 plist 中是否具有某个值,如果匹配,我希望它显示字典中的值之一,而不是整个字典,而是我使用 NSPredicate 的方式将整个项目词典归还给我。我可以知道该怎么做吗?

假设我的 plist 如下所示:

    Root (Array)
     Item 0 (Dictionary)
          Name (String)
          Number (String)
          Address (Dictionary)
               First Address (Array)
                    Item 0 (Dictionary)
                         Block (String)            Value: 1234
                         Postal Code (String)
                         Unit Number (String)
                         Street Name (String)      Value: King Street
               Second Address (Array)
                        Item 1 (Dictionary)
                         Block (String)
                         Postal Code (String)
                         Unit Number (String)
                         Street Name (String)
     Item 1 (Dictionary)
          and so on...

我的 NSPredicate 是这样的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Block == '1234'"];
NSArray *predicateArray = [blockStage filteredArrayUsingPredicate:predicate];

NSPredicate 将第 0 项中的所有值返回给我,但我只想显示“街道名称”的值,即“国王街”。我该怎么做呢???

非常感谢!!

【问题讨论】:

    标签: objective-c plist nspredicate


    【解决方案1】:

    您的 fetch 请求将返回初始数组中与您的谓词匹配的所有对象。因此,如果您的初始数组包含 Item 0 级别的对象,这就是返回的内容。

    如果您以后只想显示街道名称,那么您需要使用任何必要的 objectForKey 语句从返回的对象中选择它。您可能需要一些额外的逻辑来确定哪个地址(第一个或第二个)与您的谓词匹配,因为键是相同的。

    如果您的键确实如上述 plist 示例中所述,则这些键不符合键值编码。有关详细信息,请参阅Key-Value Coding Fundamentals

    【讨论】:

    • 嗯,只要块值为“1234”,就显示街道名称。我尝试使用 objectForKey,但它没有响应,因为我使用的是 NSArray *predicateArray。
    • 如果在获取请求后执行NSLog(@"%@",predicateArray);,您会看到什么?
    • 它显示:{ Block = "1234";邮政编码 = “价值”;单位编号=“价值”;街道名称=“国王街”;这就是我不使用 objectForKey 时显示的内容。使用 objectForKey 会使应用程序崩溃。
    • [predicateArray objectForKey:@"Street Name"]; 导致崩溃?我想知道您的键名中是否允许使用空格?在那里有空格似乎不是一个好主意,我从来没有见过这样的键,但这是一个猜测。
    • 实际上您在上面发布的内容看起来像是来自单个字典而不是数组的日志,这是完整的日志吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多