Базовые данные - отношения сущностей не работают должным образом - PullRequest
0 голосов
/ 17 июня 2010

Я настроил свою модель данных в xcode следующим образом

EntityA

AttA1 AttA2

EntityB

attB1 AttB2 AttB3

Затем я устанавливаю отношения

EntityA

Имя: rlpToEntityB

Пункт назначения: EntityB

Inverse: rlpToEntityA

Для многих: проверено

EntityB

Имя: rlpToEntityA

Пункт назначения: EntityA

Inverse: rlpToEntityB

Для многих: не проверено

т.е. отношения между двумя, где каждый из EntityA может иметь множество EntityB

Насколько я понимаю, если я получу подмножество EntityB, я смогу получить значения для связанных EntityA.

У меня это работает, так что я могу получить значения EntityB, используя

NSManagedObject * objMO = [fetchedResultsController objectAtIndexPath: indexPath];

strValueFromEntityB = [objMO valueForKey: @ "AttB1"];

Однако, если я пытаюсь получить связанное значение из EntityA, выполнив следующее

strValueFromEntityA = [objMO valueForKey: @ "AttA1"];

Я получаю сообщение об ошибке «Объект EntityB не совместим со значением ключа для ключа Atta1»

Не удивительно, что я полагаю, что если я переключу вещи, чтобы извлечь их из EntityA, я не смогу получить доступ к атрибутам EntityB, поэтому кажется, что определенные отношения игнорируются.

Кто-нибудь может заметить, что я делаю неправильно?

Признаюсь, я очень новичок в программировании для iPhone и особенно в Core Data, поэтому, пожалуйста, будьте осторожны со мной и предоставьте подробные объяснения или укажите мне конкретный ресурс. Я скачал примеры приложений Apple («Основные книги», «Лучшие песни» и «Рецепты»), но все еще не могу разобраться.

Спасибо заранее, Нев.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Большое спасибо за ваш ответ, но теперь я решил свою проблему. хотя я уверен, что ваш ответ имеет некоторые достоинства, это не то, что я использовал для решения своей проблемы. (возможно, я не очень хорошо объяснил это, отсюда и нехватку ответов), но вкратце мне нужно было использовать метод valueForKeyPath вместо valueForKey.

Ура, Нев.

1 голос
/ 17 июня 2010

Вы не можете получить атрибуты одного объекта напрямую от другого объекта.Чтобы заимствовать свою терминологию, вы должны сделать что-то вроде этого:

(сущность B) -> (отношение к A) -> (атрибут A)

или

[[objMO valueForKey: @"rlpToEntityA"] valueForKey: @"AttA1"]
...