Соответствие строки NSP предиката по сравнению с NSSet - PullRequest
3 голосов
/ 04 августа 2010

Я пытаюсь использовать NSPredicate для поиска совпадений строк в массиве объектов CoreData, сгенерированных так:

// Grab an array of all Company projects
NSArray *array = [[company projects] allObjects];

Я использую следующий предикат для сопоставления любых имен проектов, компаний или клиентовимена с нечувствительной к регистру строкой (примечание: это должно допускать частичное совпадение, чтобы «приложение» соответствовало «Apple Inc.» и т. д.):

(name LIKE[cd] %@) OR (ANY companies.name LIKE[cd] %@) OR (ANY companies.clients.name LIKE[cd] %@)

Отношения CoreData, упомянутые в представлении предикатавот так:

SELF -> (NSString *) name
SELF -> (NSSet *) companies -> (NSString *) name
SELF -> (NSSet *) companies -> (NSSet *) -> clients -> (NSString *) name

Всякий раз, когда я пытаюсь отфильтровать по вышеуказанному предикату, я нахожу в своей консоли следующее:

HIToolbox: ignoring exception 'Can't do regex matching on object {(
    "Apple Inc.",
"Test Co.",
Microsoft
)}.'

Если я правильно понимаю вещи, это выглядит какхотя при попытке сопоставления с траекторией ключей "companies.clients.name" возвращает NSSet (или другой объект), где ожидалось NSString (имя).

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

1 Ответ

4 голосов
/ 04 августа 2010

companies.clients.name вернет коллекцию NSSet с, где каждый элемент в коллекции является содержимым имен клиентов одной компании (то есть NSSet).Возможно, вы захотите использовать companies.@unionOfSets.clients.names в вашей строке предиката.

См. Руководство по использованию Операторов Set и Array в кодировании значения ключа.

...