【问题标题】:Filtering an Array problems过滤数组问题
【发布时间】:2012-07-13 13:49:15
【问题描述】:

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

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

【问题讨论】:

    标签: ios sorting nsarray nspredicate


    【解决方案1】:

    来自Predicate Programming Guide

    单引号或双引号变量(或替换变量字符串) 导致 %@、%K 或 $variable 在 格式化字符串,从而防止任何替换。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多