Я не вижу проблемы с вашим предикатом. Один =
идеально подходит, если вы хотите соответствовать точным строкам. Если вам не нужно сопоставление с подстановочными знаками, вам не нужно медленное LIKE. ( Синтаксис строки формата предиката )
Однако в вашем коде есть проблема, и она может привести вас к неверным предположениям. Ваше if / then / else или хотя бы первое сообщение является своего рода неправильным. Если выборка не возвращает массив, это означает, что выборка не удалась, это не означает, что выборка не возвращала объекты.
Это должно быть больше так:
if (!matches)
{
NSLog(@"Error: couldn't execute fetch request %@", error);
}
else if([matches count] > 1) {
NSLog(@"Error: More than one object for unique record");
returnValue = YES;
} else if ([matches count] == 0) {
NSLog(@"couldn't match objects");
returnValue = NO;
} else {
// [matches count] == 1
NSLog(@"matched one object");
returnValue = YES;
}
О, и я бы изменил порядок условий. По моему мнению, структура типа (! Совпадений), ([количество совпадений] == 1), ([количество совпадений] == 0), (еще) имеет больше смысла, и ее легче читать. Вы ставите самое важное (потому что это то, что вы действительно хотите) условие в последнем «анонимном» остальном.