2013-01-14 26 views
1

我确定已经询问了这个问题,但我不知道要搜索什么。NSPredicate过滤器数组,但只返回一个对象的字段

我有消息对象的数组,其中包含以下字段{selected[BOOL], messageText[STR]}。我想过滤这个数组以获得只有selected=TRUE的对象。到现在为止还挺好。

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

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

回答

11

这不是一个谓词的工作。谓词仅适用于筛选,而不是修改,您应用它们的数组。

但是,有一个有趣的小技巧:方法-valueForKey:将应用您想要的数组的变换类型。只是你想要的messageText键调用它:

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

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

相关问题