2010-09-05 3 views
4

Может ли кто-нибудь помочь мне определить предикат, который возвращает только атрибут NSManagedObject, длина атрибута «буквы» находится в определенном диапазоне?NSPredicate для длины строки атрибута NSManagedObject

Вот пример, который я пробовал, у меня такое ощущение, что это обозначение letter.length, я также пробовал буквы kvc. @ Длина без успеха .. Что я делаю неправильно?

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]; 

ответ

6

Не знаете, как этот фрагмент кода является производительность мудрым, но вот мой ответ на ваш вопрос:

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

Джосс.

+3

Это должен быть принятый ответ. –

4

У меня плохие новости. Вы не можете этого сделать. Нет атрибута длины для строк в NSPredicate (который я смог найти).

Что бы я рекомендовал вам, это добавить атрибут длины сохраненной строки в управляемом объекте, который устанавливается при установке атрибута букв. Затем вы можете выполнить свой запрос по этому атрибуту и ​​вернуть нужные значения.

+0

Спасибо Joshua. Согласовано. – jbg

3

В случае, если кто-то ищет способ проверить, имеет ли строка длины с использованием NSPredicate, это possible.

+3

остерегайтесь того, что связанное с вами решение не работает с данными ядра, как это требует SO. –

Смежные вопросы