我确定已经问过这个问题,但我不知道该搜索什么。
我有一些Message对象,其中包含以下字段{selected[BOOL], messageText[STR]}
。我想过滤此数组以仅获取selected=TRUE
的对象。到目前为止一切都很好。
NSArray *messagesFiltered = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"selected == TRUE"]];
但是,我不需要返回数组中的对象本身,我需要一个messageText
字符串数组。如何修改predicate
只返回messageText
个字符串而不是整个对象?
答案 0 :(得分:11)
这不是谓词的工作。谓词仅适用于过滤,而不是修改,即您应用它们的数组。
然而,这是一个有趣的小技巧:方法-valueForKey:
将应用你想要的数组变换。只需使用您想要的messageText
密钥调用它:
NSArray *messagesFiltered = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"selected == TRUE"]];
NSArray *realMessages = [messagesFiltered valueForKey:@"messageText"];
在数组上,-valueForKey:
向每个元素询问给定键的值,然后返回元素返回的所有内容的数组。 (对于您传递的密钥,返回nil
的任何元素在结果数组中显示为[NSNull null]
。)