【发布时间】:2014-05-08 00:31:48
【问题描述】:
我将这个 JSON 对象加载到 NSDictionary 中:
media = {
photos = {
photo = (
{
"$t" = "http://some url";
"@id" = 1;
"@size" = x;
},
{
"$t" = "http://another url";
"@id" = 1;
"@size" = fpm;
},
{
);
};
};
我正在尝试搜索照片数组并仅返回 @size 属性 = x 的照片。
我认为这可行,但它返回零个对象:
NSObject *photo = [[photos valueForKeyPath:@"media.photos.photo"] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%@ == x",@"@size"]];
我尝试在“x”周围加上单引号,但也失败了。我认为这是导致问题的属性名称本身的@符号。任何帮助将不胜感激。
编辑
以@ 开头的键似乎是问题所在。如果我尝试使用 NSPredicate 搜索数组,则会引发“NSUnknownKeyException ...类不符合键值”错误。
我可以像这样使用嵌套的 for 循环进行搜索:
for (id photo in photos) { for (id key in photo) { id value = [photo objectForKey:key]; if ([key isEqualToString:@"@size"] && [value isEqualToString:@"x"]) { stringXLargePhotoUrl = [photo valueForKey:@"$t"]; break; } } if (stringXLargePhotoUrl != Nil) break; }
但这很笨拙。如果可能的话,我宁愿使用 NSPredicate 。我不控制 JSON 对象,所以我不能只将键更改为不以 @ 开头。
【问题讨论】: