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

Kir*_*odd 1 cocoa objective-c nspredicate ios

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

我有一些Message对象,包含以下字段{selected[BOOL], messageText[STR]}.我想过滤此数组以仅获取对象selected=TRUE.到现在为止还挺好.

NSArray *messagesFiltered = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"selected == TRUE"]];
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*Tim 11

这不是谓词的工作.谓词仅用于过滤而不是修改应用它们的数组.

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

NSArray *messagesFiltered = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"selected == TRUE"]];
NSArray *realMessages = [messagesFiltered valueForKey:@"messageText"];
Run Code Online (Sandbox Code Playgroud)

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