проблема с предикатом - PullRequest
       2

проблема с предикатом

0 голосов
/ 26 сентября 2011

при использовании nspredicate (между предикатом) у меня было исключение.

есть код, который я использовал:

NSMutableArray *returnedArray=[[[NSMutableArray alloc]init] autorelease];
NSManagedObjectContext *context = [self managedObjectContext]; 
NSEntityDescription *objEntity = [NSEntityDescription entityForName:@"Note" inManagedObjectContext:context];



NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:objEntity];


NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"When" ascending:YES];   

NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];   
[fetchRequest setSortDescriptors:sortDescriptors];   
[sortDescriptor release]; 



NSPredicate *predicate1 = [NSPredicate predicateWithFormat:
                          @"self.Reunion==%@",reunion];
NSNumber *endOfEtape=[NSNumber numberWithInt:[etape.positionDepart intValue]+[etape.duree intValue]];
NSExpression *s1 = [ NSExpression expressionForConstantValue: etape.positionDepart ];
NSExpression *s2 = [ NSExpression expressionForConstantValue: endOfEtape ];
NSArray *limits = [ NSArray arrayWithObjects: s1, s2, nil ];
 NSPredicate *predicate2=[NSPredicate predicateWithFormat: @"self.When BETWEEN %@",limits];

NSPredicate *predicate=[NSCompoundPredicate andPredicateWithSubpredicates:
                                [NSArray arrayWithObjects:predicate1,predicate2,nil]];
[fetchRequest setPredicate:predicate];


NSArray *notes; 
notes=[context executeFetchRequest:fetchRequest error:nil];

[fetchRequest release];

, и у меня было 'objc_exception_throw' в строке накоторый я называю методом executeFetchRequest:

Я буду рад, если вы сможете мне помочь.Спасибо.

1 Ответ

1 голос
/ 26 сентября 2011

К сожалению, операнд BETWEEN считается агрегатной функцией, и он не поддерживается CoreData.

См. Документация Apple

... рассмотреть оператор BETWEEN (NSBetweenPredicateOperatorType); его правая часть - это коллекция, содержащая два элемента. Используя только Mac OS X v10.4 API, эти элементы должны быть константами, так как нет способа заполнить их с помощью переменных выражений. В Mac OS X v10.4, невозможно создать шаблон предиката с эффектом дата между {$ YESTERDAY, $ TOMORROW}; вместо этого вы должны создать новый предикат каждый раз.

Агрегатные выражения не поддерживаются Базовыми данными.

Так что вам нужно использовать предикат вроде:

NSPredicate *predicate2 = [NSPredicate predicateWithFormat: 
@"self.When >= %@ AND self.When <= %@", etape.positionDepart, endOfEtape];

(при условии positionDepart и endOfEtape имеют тип NSString)

...