这似乎相当简单,但我找不到任何具体引用它的东西。
假设我有一组Post
个对象,每个对象都有一个objectId
。如何创建仅包含objectId
的数组?
类似的东西:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"objectId ALL"]; // I just want all the objectIds...
NSArray *results = [[self.objects filteredArrayUsingPredicate:predicate] mutableCopy];
或
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"objectId matches {anything}"];
答案 0 :(得分:1)
NSPredicate
无法返回BOOL
以外的任何内容,因此无法返回objectId
。此外,filteredArrayUsingPredicate:
可以更改数组中的项目数,但它会保持对象本身不变。
如果您想从一个对象开始并生成另一个对象,则需要NSExpression
。它可以将您的对象转换为其他对象 - 例如,通过投影其中一个属性。但是,Cocoa没有以与NSExpression
类似的方式提供将 NSArray
应用于filteredArrayUsingPredicate:
的内置方式,因此NSExpression
无效这里。
你可以通过一个小技巧来解决这个问题:
NSString *key = NSStringFromSelector(@selector(objectId));
NSMutableArray *allIds= [[array valueForKey:key] mutableCopy];
如果您在生产代码中使用它,最好通过几行注释对其进行大量记录。否则,您的代码的读者(包括您在大约六个月左右的时间)几乎可以保证混淆。
答案 1 :(得分:0)
好的,事实证明这不是NSPredicate的任务,这就是为什么我无法找到如何使用它。相反,我可以通过键值编码(KVC)很容易地做到这一点。
如果你想简单地检索一些东西而不是过滤,那么:
NSArray *results = [self.objects valueForKey:@"objectId"];