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 には文字列の長さ属性がありません (私が見つけたものです)。

私がお勧めするのは、文字属性を設定するときに設定される、管理対象オブジェクトに格納された文字列の長さの属性を追加することです。その後、その属性に対してクエリを実行し、必要な値を返すことができます。

于 2010-09-05T02:49:30.717 に答える
3

NSPredicate を使用して文字列の長さをテストする方法を誰かが探している場合 は、可能です。

于 2012-02-14T17:11:57.027 に答える