Я создание способа извлечения продукта из моей базы данных, каждый элемент имеет высоту поля, ширину и percErro (процент ошибки),Выполните вычисления с полями базами данных в NSPredicate Core Data
Пользователя вводит ширину и высоту вы хотите найти, например: 15 x 15 см.
Затем метод должен приносить совместимые продукты с этими числами с учетом процента ошибок, допущенных при его регистрации.
Допустим, продукт база данных 14 х 14см и процент ошибок составляет 10% (1.4cm), то вы ищете продукт, который 15 х 15 см
В моем запросе я должен сделать что-то как это:
[query appendString: [NSString stringWithFormat: @ "(heigthInserted * percErro/1000) <= (height * percErro/100)"
[query appendString: [NSString stringWithFormat: @ "AND (widthInserted * percErro/1000) <= (width * percErro/100)"
NSPredicate * predicate = [NSPredicate predicateWithFormat: query];
[Request setPredicate: predicate];
Это должно принести мне все продукты, что процент ошибок не превышает 10% (1,4 см)
Я знаю NSPredicate не принимает математические операции, как я мог бы получить результат вычисляя этот процент ошибки?
**
решаемые
**
Я принял ответ pbasdf и сделать вывод, что математические операторы работают в NSPredicate, но должны быть написаны в соответствии с документация по этой ссылке: Documentation
Ниже мой 100% функционального метода с операторами:
-(NSMutableArray*)findWithDimensoes:(NSMutableArray*)formatos :(float)largura :(float)altura{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:TABLE_NAME inManagedObjectContext:managedObjectContext]];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"altura" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"largura" ascending:YES];
NSArray *arraySD = [NSArray arrayWithObjects:sortDescriptor1,sortDescriptor2,nil];
[request setSortDescriptors:arraySD];
[request setFetchLimit:20];
NSMutableString *query = [[NSMutableString alloc] init];
[query appendString:[NSString stringWithFormat:@" (habilitado == true) "]];
if (formatos != nil) {
for (ProdutoDimensao *d in formatos) {
if ([d.id intValue] > 0) {
if (([formatos indexOfObject:d] < formatos.count)) {
[query appendString:@" AND "];
}
[query appendString:[NSString stringWithFormat:@" (produtoDimensao.id == %d) ",[d.id intValue]]];
}
}
}
[query appendString:[NSString stringWithFormat:@" AND altura >= from:subtract:(%lf,multiply:by:(%lf,percErro)) AND altura <= add:to:(%lf,multiply:by:(%lf,percErro)) ",altura,altura,altura,altura]];
[query appendString:[NSString stringWithFormat:@" AND largura >= from:subtract:(%lf,multiply:by:(%lf,percErro)) AND largura <= add:to:(%lf,multiply:by:(%lf,percErro)) ",largura,largura,largura,largura]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:query];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
return [results mutableCopy];
}
Спасибо за ваш ответ, я пытался использовать операторы NSExpression указанных путей, однако, кажется, что не работает, они будут работать, если прямой добавлен в [NSPredicate predicateWithFormat : @ "..."]; как я это сделал? – jucajl
Можете ли вы отредактировать свой пост, чтобы показать, что вы пробовали, и какие ошибки/результаты вы получили? Благодарю. – pbasdf
Я обновил сообщение и добавил свой полный метод – jucajl