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