我有一个名为
NSArray
的 groups
,其中包含 NSArray
对象,每个对象又包含 QuestionSub
对象,而这些对象又继承自 Question
类。
Question 类包含一个名为
NSString
的 Id
值。这是我想要搜索的字符串。
问题是 QuestionSub
包含一个名为 NSString
的 parent
,它是对父问题的引用;因此我不能使用 NSPredicate
来查询 ANY
语句,因为它会匹配任何相等的字符串。
我的问题是我的搜索没有返回结果。但是,我似乎无法找到正确的查询来让我的
NSPredicate
获得正确的结果。
这是我的代码:
/**
* Get the (QuestionSub)[QuestionSub] for a questuon GUID
*
* @param guid NSString The GUID of the question
*
* @return QuestionSub The QuestionSub
*/
- (QuestionSub *)getQuestionForGuid:(NSString *)guid
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Id == %@", guid];
NSArray *filtered = [self.groups filteredArrayUsingPredicate:predicate];
if (filtered.count > 0)
{
return [filtered objectAtIndex:0];
}
else {
return nil;
}
}
这是我的
NSArray
的代表:
问题在于 filteredArrayUsingPredicate: 过滤了整个组数组。因此,ANY 运算符表示要过滤掉包含具有所需 Id 属性的 Question 对象的所有子数组。
在您的示例中,您在同一子数组中有具有相同 Id 和 parent 的问题,因此 ANY 在这里可以正常工作,并且 == 和 CONTAINS 之间对于我们的目标没有区别。
要获得所需的结果,您首先需要将组展平为一维问题数组,然后应用谓词。
不幸的是 NSArray 类没有提供任何方法来展平多维数组(:
看起来你可以使用字符串比较谓词,你可以试试这个:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Id CONTAINS[c] %@", guid];