代码之家  ›  专栏  ›  技术社区  ›  jbg

NSPredicate获取NSManagedObject的字符串属性的长度

  •  4
  • jbg  · 技术社区  · 14 年前

    这是我一直在尝试的一个例子,我有种感觉字母.长度表示法,我也尝试了kvc字母。@length,但没有成功。。我做错什么了?

    NSManagedObjectContext *context = ...;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Word" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"letters" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"letters.length BETWEEN %@", [NSArray arrayWithObjects: [NSNumber numberWithInt:5], [NSNumber numberWithInt:20], nil]];
    [fetchRequest setPredicate:predicate];
    
    NSUInteger limit = 20;
    [fetchRequest setFetchLimit:limit];
    
    NSError *error = nil;
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
    
    3 回复  |  直到 14 年前
        1
  •  7
  •   Demitri    5 年前

    我不确定这个代码片段在性能方面如何,但下面是我对您的问题的回答:

    NSString *attributeName = @"letters";
    NSString *attributeValue = [NSString stringWithFormat:@"'.{%d,%d}'", 5, 20];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES %@", attributeName, attributeValue];
    [fetchRequest setPredicate:predicate];
    

        2
  •  4
  •   sjagr    14 年前

    我有个坏消息。你不能这么做。NSPredicate中没有字符串的长度属性(我已经找到了)。

    我建议您为托管对象中存储的字符串的长度添加一个属性,该字符串在设置letters属性时设置。然后可以对该属性执行查询并返回所需的值。

        3
  •  3
  •   Community Mofi    7 年前

    如果有人想用NSPredicate测试字符串是否有长度, 它是 possible