0

我正在尝试通过名为“名称”的属性的第一个字母过滤一组海关对象。为了实现这一点,我制作了一个首字母数组:

_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 为我提供了我手动执行的准确句子结构!

4

1 回答 1

2

谓词编程指南

单引号或双引号变量(或替换变量字符串)会导致 %@、%K 或 $variable 被解释为格式字符串中的文字,从而防止任何替换。

所以试着去掉'%@'的引号:

NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", letter];
于 2012-07-13T14:05:01.530 回答