我正在尝试通过名为“名称”的属性的第一个字母过滤一组海关对象。为了实现这一点,我制作了一个首字母数组:
_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 为我提供了我手动执行的准确句子结构!