1

我确定有人问过这个问题,但我不知道要搜索什么。

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

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

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

4

1 回答 1

11

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

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

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

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

于 2013-01-14T04:46:31.203 回答