Я создаю метод для восстановления продукта из моей базы данных, каждый элемент имеет поля высоты, ширины и percErro (процентная ошибка),
Пользователь вводит ширину и высоту, которые вы хотите найти, например: 15 x 15 см.
Затем метод должен вывести совместимые товары с этими номерами с учетом процента погрешности, допускаемого при его регистрации.
Допустим, продукт в базе данных имеет размер 14 x 14 см, а процент ошибок составляет 10% (1,4 см), тогда вы ищете продукт размером 15 x 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, но должны быть написаны в соответствии с документацией по этой ссылке: Документация
Ниже мой 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];
}