NSPredicate 针对 NSArray 中的嵌套值

Posted

技术标签:

【中文标题】NSPredicate 针对 NSArray 中的嵌套值【英文标题】:NSPredicate against nested values in NSArray 【发布时间】:2013-10-23 01:42:23 【问题描述】:

我有一个 SKNodes 的 NSArray,并且正在尝试使用 NSPredicate 使用谓词过滤器对 SKNodes 的 location.y 值进行排序。我正在尝试以下操作,但在运行时我得到“这个类不是键 y 的键值编码兼容”所以,我假设我必须做其他事情来过滤对象的子组件?这可能吗?

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"position.y"
                                                             ascending:YES];
NSArray *results = [myarrayofsknodes sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

【问题讨论】:

该点的 x/y 字段无法通过 KVC 访问,因为 CGPoint 不是对象 (id) 而是 C 结构。尝试使用为您提供两个对象(节点)的比较器,然后在比较器块中比较它们的 position.y。 【参考方案1】:

LearnCocos2D 的评论是正确的。但是,您可以通过其他方式进行排序。

NSArray *original; // Populate this elsewhere
NSArray *results = [original sortedArrayUsingComparator:^(MyObject *obj1, MyObject *obj2) 
    if (obj1.position.y==obj2.position.y) 
        return NSOrderedSame;
     else if (obj1.position.y < obj2.position.y) 
        return NSOrderedAscending;
     else 
        return NSOrderedDescending;
    
];

【讨论】:

以上是关于NSPredicate 针对 NSArray 中的嵌套值的主要内容,如果未能解决你的问题,请参考以下文章

当字符串的一部分为空时,使用 NSPredicate 过滤字符串的 NSArray

使用 NSPredicate 搜索 NSArray

NSArray 的 NSArray 中对象属性的 NSPredicate

从 NSArray 动态生成 NSPredicate

NSManagedObject 类关系中的 NSPredicate 键

NSArray 和 NSPredicate 使用 NOT IN