关键字路径为谓词中的对象的字典属性的元素?
问题描述:
总之,我正在寻找正确的谓词格式来索引对象的字典属性。关键字路径为谓词中的对象的字典属性的元素?
我有一个myObject实例数组,每个都有一个属性CPDictionary(NSMutableDictionary)extAttributes,我试图允许基于extAttributes中的值进行过滤。我正在定义我的谓词如下
[CPPredicate predicateWithFormat:@"extAttributes[%K] like[c] %@",key,val]
我不知道什么是正确的键路径会是这样。阅读关于NSPredicate的文档,似乎“extAttributes [%k]”可能是数组索引,而不是字典。我已经尝试了几种选择,这是唯一一个不会出错的选择。在检查结果对象时,谓词对象中的表达式看起来是正确的。但是,它没有预期的结果。
答
看起来你可能会混淆数组和字典引用。只需使用一个关键路径(点分隔的元素名称)来引用嵌套元素或对象的属性,在概念上是这样的:
[CPPredicate predicateWithFormat:@"%K like[c] %@", @"extAttributes.myNestedElementName", val];
再说,我不是那么熟悉卡布奇诺,所以我不知道他们在这里做了些什么稍微不同的事情,但这是它在Cocoa和Cocoa touch中的工作方式。
编辑
要计算动态的关键,所有你需要做的就是组成一个关键路径字符串:
var keyPath = [CPString stringWithFormat:@"%@.%@", @"extAttributes", key];
您现在可以创建谓词如下:
[CPPredicate predicateWithFormat:@"%K like[c] %@", keyPath, val];
编辑
可可/可可触摸的等效代码如下:
NSString *keyPath = [NSString stringWithFormat:@"%@.%@", @"extAttributes", key];
[NSPredicate predicateWithFormat:@"%K like[c] %@", keyPath, val];
我通过实施'解决了这个 - (ID)valueForUndefinedKey:(ID)key'上myObject的。 ' - (id)valueForUndefinedKey:(id)key {ret = [extAttributes objectForKey:key]; return ret; } ' 然后它就是'[CPPredicate predicateWithFormat:@“%K like [c]%@”,key,val];' – jlujan
这是一个破解。不要这样做。使用关键路径。 – jlehr
这是它的一个副作用,它已经实现了将随机列添加到表视图。正确的关键路径是什么? – jlujan