2015-03-16 5 views
0

В моей сущности Contact у меня есть два столбца с именем firstName & lastName. Я хочу найти имя, введенное пользователем в моей БД.Как объединить два значения столбца и сравнить их в ios

Например: если пользователь вводит только «Уильям», я могу выполнить поиск либо его имени по имени, либо фамилии и показать результат. Если пользователь вводит «William Smith», я хочу получить имя и фамилию от БД и сравнить его с текстом поиска.

Для этого я хочу использовать NSPredicate, сравнивающий 3 Состояние:

firstName contains the search text OR 
lastName contains the search text OR 
firstName+lastName contains the search text. 

Я использовал следующий предикат для этого:

NSString *strSearchType = @"(%@ CONTAINS[cd] '%@' OR %@ CONTAINS[cd] '%@' OR (%@ || %@ CONTAINS[cd] '%@')"; 

Я знаю, что "||" является конкатенатным оператором.

Но это дает мне следующее исключение:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(firstName CONTAINS[cd] 'rus' OR lastName CONTAINS[cd] 'rus' OR ((firstName || lastName) CONTAINS[cd] 'rus'))"' 

я делаю что-то неправильно?

+0

если первое имя «XYZ» и фамилию идентификатор «а», то вы хотите, чтобы показать эту запись для строки поиска «Заб» (имени + lastneme) также. Правильно ли это? –

+0

Нет. Значит, если iuser входит в «xyz abc», то я хочу показать результат – JamesDon

ответ

0

Вы можете попробовать следующее:

firstName contains the search text OR 
lastName contains the search text OR 
(search text contains the firstName AND search text contains the lastName). 
0
NSString* stringA=nil;  NSString* stringB=nil; 

// this would give array of string separated by space 
NSArray *searchStrArray = [searchString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]]; 

    if (searchStrArray.count>0) { 
     stringA=[searchStrArray objectAtIndex:0]; 
    } 
    if (searchStrArray.count>1) { 
     stringB=[searchStrArray objectAtIndex:1]; 
    } 

NSPredicate* predicateA= [NSPredicate predicateWithFormat:@“firstName CONTAINS[c] %@ OR lastName CONTAINS[c] %@",stringA , stringA]; 

NSPredicate* resultPredicate=predicateA; 

if(stringB){ 
NSPredicate* predicateB= [NSPredicate predicateWithFormat:@“firstName CONTAINS[c] %@ OR lastName CONTAINS[c] %@",stringB , stringB]; 

      resultPredicate=[NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:resultPredicate,predicateB, nil]]; 

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