Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用NSPredicate查找键以@_Objective C_Nspredicate - Fatal编程技术网

Objective c 使用NSPredicate查找键以@

Objective c 使用NSPredicate查找键以@,objective-c,nspredicate,Objective C,Nspredicate,我将这个JSON对象加载到NSDictionary中: media = { photos = { photo = ( { "$t" = "http://some url"; "@id" = 1; "@size" = x;

我将这个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…类不符合键值”错误

我可以使用嵌套搜索循环,如下所示:


但那很笨重。如果可能的话,我宁愿使用NSPredicate。我不控制JSON对象,所以我不能只更改键而不以@开头。

本文非常好,可能会有所帮助

%@对象值的var arg替换通常是字符串, 号码或日期

%K是键路径的var arg替换

改变

 ... [NSPredicate predicateWithFormat:@"%@ == x",@"@size"]];


@
K

谢谢,但我还有我的问题。它是属性中的@符号。它被视为一个“收集操作员”。当我使用您的代码建议并出现错误“NSUnknownKeyException…类不符合键值”时,我的应用程序崩溃。我想这意味着我不允许在我的财产中使用@符号。不幸的是,我无法控制JSON对象,也无法找到一种方法来转义@符号。如有任何建议,我们将不胜感激。@Dave:您是否尝试过使用反斜杠作为转义字符,例如
“\@size”
?“\@size”会引发“未知转义序列”警告。运行带有警告的代码不会返回任何结果。不过谢谢。如果没有其他办法,您可以在将json字符串序列化到NSDictionary之前从json字符串中删除@符号。
 ... [NSPredicate predicateWithFormat:@"%@ == x",@"@size"]];
 ... [NSPredicate predicateWithFormat:@"%K == x",@"@size"]];