NSPredicate过滤器数组但只返回一个对象的一个​​字段

时间:2013-01-14 04:38:55

标签: ios objective-c cocoa nspredicate

我确定已经问过这个问题,但我不知道该搜索什么。

我有一些Message对象,其中包含以下字段{selected[BOOL], messageText[STR]}。我想过滤此数组以仅获取selected=TRUE的对象。到目前为止一切都很好。

NSArray *messagesFiltered = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"selected == TRUE"]];

但是,我不需要返回数组中的对象本身,我需要一个messageText字符串数组。如何修改predicate只返回messageText个字符串而不是整个对象?

1 个答案:

答案 0 :(得分:11)

这不是谓词的工作。谓词仅适用于过滤,而不是修改,即您应用它们的数组。

然而,这是一个有趣的小技巧:方法-valueForKey:将应用你想要的数组变换。只需使用您想要的messageText密钥调用它:

NSArray *messagesFiltered = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"selected == TRUE"]];
NSArray *realMessages = [messagesFiltered valueForKey:@"messageText"];

在数组上,-valueForKey:向每个元素询问给定键的值,然后返回元素返回的所有内容的数组。 (对于您传递的密钥,返回nil的任何元素在结果数组中显示为[NSNull null]。)