4

有人可以帮我定义一个谓词,它只返回 NSManagedObject 的谁的“字母”属性长度在一定范围内吗?

这是我一直在尝试的示例,我感觉它是 letters.length 符号,我也尝试了 kvc letters.@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];
4

4 回答 4

7

不确定此代码段的性能如何,但这是我对您的问题的回答:

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

乔斯。

于 2013-01-03T23:00:15.397 回答
4

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

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

于 2010-09-05T02:49:30.717 回答
3

如果有人正在寻找一种使用 NSPredicate 测试字符串是否具有长度的方法, 可以使用.

于 2012-02-14T17:11:57.027 回答
0

迅速:

返回 4 到 7 个字符的字符串。

NSPredicate(format: "text MATCHES %@", ".{4,7}")
于 2021-07-17T01:24:41.300 回答