过滤数组问题

时间:2012-07-13 13:49:15

标签: ios sorting nsarray nspredicate

我正在尝试通过名为“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为我提供了我手动完成的确切句子形式!

1 个答案:

答案 0 :(得分:2)

来自Predicate Programming Guide

  

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

所以尝试从'%@'中取出引号:

NSPredicate* letterPredicate = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", letter];
相关问题