Данные о ядре NSPredicate

Каково точное различие между КАК [c] % и = [c] % в основных данных NSPredicate ? Я хочу искать последовательность, которая должна точно соответствовать приемнику. Пример:

NSArray *arrayNames = [context fetchObjectsForEntityName:NSStringFromClass([PatientFamilyMember class])
      withSortColumn:nil withSortDescending:FALSE
      withPredicate:@"patientID = %@ && firstName=[c]%@ && relationship=[c]%@ && lastName=[c]%@",
      self.pfm.patientID, firstName, relationship, lastName];

This works but I have not understood the difference between using LIKE [c] and = [c]%@.

3
nl ja de

1 ответы

Различие между КАК и = в предикате - то, что КАК позволяет ? и * как подстановочные символы, где ? соответствует 1 характеру, и * соответствует 0 или больше знакам.

Оба КАК и = может быть изменен с [c] , чтобы определить нечувствительность к регистру.

Пример: Предположите, что у вас есть объекты с именами

"Mark", "mark", "Mike", "mike", "M*"

Оба

[NSPredicate predicateWithFormat:@"name = %@", @"Mark"];
[NSPredicate predicateWithFormat:@"name LIKE %@", @"Mark"];

find "Mark", and Оба

[NSPredicate predicateWithFormat:@"name =[c] %@", @"Mark"];
[NSPredicate predicateWithFormat:@"name LIKE[c] %@", @"Mark"];

найдите "Марка" и "отметку". Но только КАК оператор может использоваться с подстановочными знаками, например.

[NSPredicate predicateWithFormat:@"name LIKE[c] %@", @"M*"];

находит "Марка", "отметку", "Майка", "микрофон" и "M*", но

[NSPredicate predicateWithFormat:@"name ==[c] %@", @"M*"];

находит только "M*".

Посмотрите Сравнения строк в "Руководстве по программированию Предиката" для получения дополнительной информации.

12
добавлено
Превосходный и четкий ответ. Мне жаль, что вы не работали в Apple' s отдел документации...
добавлено автор Mike Gledhill, источник