Базовые данные - отношения сущностей не работают должным образом
Я настроил свою модель данных в XCode так
EntityA
AttA1 AttA2
EntityB
AttB1 AttB2 AttB3
Затем я установил отношения
EntityA
Имя: rlpToEntityB
Назначение: EntityB
Обратное: rlpToEntityA
Для многих: проверено
EntityB
Имя: rlpToEntityA
Назначение: EntityA
Обратное: 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 ответа
Вы не можете получить атрибуты одного объекта напрямую от другого объекта. Чтобы заимствовать свою терминологию, вы должны сделать что-то вроде этого:
(Объект B)->(отношение к A)->(атрибут A)
или же
[[objMO valueForKey: @"rlpToEntityA"] valueForKey: @"AttA1"]
Большое спасибо за ваш ответ, но теперь я решил свою проблему. хотя я уверен, что ваш ответ имеет некоторые достоинства, это не то, что я использовал для решения своей проблемы. (возможно, я не очень хорошо объяснил это, отсюда и нехватку ответов), но вкратце мне нужно было использовать метод valueForKeyPath вместо valueForKey.
Ура, Нев.