2009-08-13 3 views
0

У меня есть объект Core Data, называемый Album; альбом имеет отношение к сущностям Песни (так называемые песни), и каждая песня имеет произвольное количество объектов тега (в свойстве тегов), теги имеют имя. Теперь я хочу проверить, содержит ли какая-либо из песен в альбоме тег; используя один NSPredicate.NSPredicates и отношения double to-n

An идеи, которые пришли на ум:

[NSPredicate predicateWithFormat: @"ANY (ANY songs).tags LIKE %@", someTagName]; 

Но это приводит к ошибке во время выполнения («Невозможно разобрать строку формата»). Я пробовал различные варианты, без успеха.

Есть ли способ сделать это?

ответ

0

Я думаю, что вы хотите

[NSPredicate predicateWithFormat:@"ANY [email protected] LIKE %@", someTagName] 

Заканчивать Руководство по программированию раздел Key-Value на set and array operators.

+0

Звучал очень хорошо, я пробовал, но я снова застрял. Обычно это не происходит со мной так часто ... Теперь я получаю следующее исключение: *** Завершение приложения из-за неотображенного исключения «NSUnknownKeyException», причина: '[ valueForUndefinedKey:]: объект Альбом не соответствует ключевым словам, совместимым с ключевыми «песнями». @ DistinctUnionOfSets.labels ». Я пробовал раунд, но я просто не мог найти место, где я мог бы разместить @distinctUnionOfSets, не вызывая такого краха. Любые подсказки, что я делаю неправильно? – 2009-08-13 21:17:24

+0

@Julian Извините, это моя ошибка для написания без тестирования. Поскольку у меня нет проекта Core Data, с которым я играю, я работаю сверху. Вы пытались @unionOfSets, а не @distinctUnionOfSets? Я всегда немного борюсь с этими операторами. Мне часто приходится ставить точку останова на строке, например [album valueForKeyPath: @ "@ songs.tags"] и посмотреть, что результат в отладчике. Если это набор наборов, то @ unionOfSets.songs.tags должен это сделать. Если это что-то еще, тогда вам нужно соответствующим образом изменить путь к ключу. –

0

Просто мысль, но, возможно, LIKE недоступна на iPhone? Я знаю, что мне было трудно с МЕЖДУ, что, похоже, не работает.

Значит, у бирки нет отношения «многие ко многим» с песнями? Если бы это было смоделировано таким образом, получение песен для тега просто включало бы доступ к тегу property.songs. То, как вы его моделировали, кажется, что теги можно дублировать для каждой песни (что может быть очень хорошо в вашем приложении).