我正在尝试通过名为“name”的属性的第一个字母过滤一系列海关对象。为了达到这个目的,我制作了一个首字母数组:
_lettersArray = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];
我想将结果保存在NSDictionary中,其中键是第一个字母,对象是一个对象数组,其属性名称的第一个字母是键:
for (NSString* letter in _lettersArray) {
NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] '%@'", letter];
NSArray* itemsLetter = [_items filteredArrayUsingPredicate:letterPredicate];
[_letters setObject:itemsLetter forKey:letter];
}
但是当这个算法结束时,_letters字典有所有键,但对象是空数组。我试图改变
NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] '%@'", letter];
的
NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] 'B'"];
一切正常(当然它只给我以B开头的对象)。我做错了什么?对我来说很清楚,问题出在谓词指令中。我已经看到_lettersArray很好,而且我试图使用[letter characterAtIndex:0]
而不是字母,但给了我相同的结果......
谓词句子的NSLog为我提供了我手动完成的确切句子形式!
答案 0 :(得分:2)
来自Predicate Programming Guide:
单引号或双引号变量(或替换变量字符串) 导致%@,%K或$变量被解释为。中的文字 格式化字符串,以防止任何替换。
所以尝试从'%@'中取出引号:
NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", letter];