Как правильно закодировать детализацию основных данных с помощью NSSet

Я относительно новичок в программировании iOS и Core Data, поэтому, пожалуйста, простите меня, если это глупый вопрос. В моем проекте у меня есть две сущности. Сущность (1) называется «Врач», сущность (2) — «Пациент». Отношения между врачом и пациентом называются «пациенты». Обратное называется «доктор». У меня есть отношение один ко многим между врачом и пациентом. Сущности были разделены на подклассы. У меня есть контроллер корневого представления, отображающий имена врачей. Я хочу иметь возможность выбирать ячейку врача и отображать его пациентов на контроллере просмотра segued. Его пациенты содержатся в NSSet. Я тут запутался. Должен ли я передавать этот NSSet в коде перехода или использовать предикат в запросе на выборку для получения только подходящих имен пациентов? Мы будем очень признательны за любой пример кода, который вы могли бы предоставить.


person user2076367    schedule 30.04.2013    source источник


Ответы (1)


Просто передайте объект Doctor, полученный, когда пользователь коснулся ячейки, вашему контроллеру деталей. Затем в подробном контроллере используйте doctor.patients (NSSet). Это самый простой вариант, и он будет хорошо работать, если вы не вносите никаких изменений в данные. Вероятно, вы отображаете пациентов в виде таблицы, поэтому вам нужно будет использовать NSSortDescriptor для организации пациентов перед их отображением (тогда они будут в массиве, и вы используете objectAtIndex:).

Если вы собираетесь изменить данные, они все равно будут работать, но вам нужно каким-то образом узнать об изменении, чтобы вы могли обновить пользовательский интерфейс.

Если у вас уже есть полученный контроллер результатов, это нормально, и он будет отслеживать изменения за вас. В этом случае используйте doctor в формате предиката:

[NSPredicate predicateWithFormat:@"doctor = %@", self.doctor];

В любом случае передайте объект доктора новому контроллеру представления.

person Wain    schedule 01.05.2013
comment
Спасибо за быстрый ответ. Требуется некоторое уточнение. Нужен ли мне еще один FRC для второго контроллера представления для второго контроллера представления таблицы или просто передать ссылку из первого? - person user2076367; 01.05.2013
comment
Каждый контроллер представления будет иметь свой собственный FRC. Первый — за врачами, второй — за пациентами. - person Wain; 01.05.2013
comment
Бесконечно благодарен. Вы мне очень помогли. - person user2076367; 01.05.2013
comment
еще один вопрос, прежде чем я попытаюсь реализовать ваши предложения сегодня утром. В вашем примере с предикатом, разве это не должно быть @Patient = %@, self.selectedDoctor. Я спрашиваю об этом, потому что так, как вы это написали, я фильтрую врачей для выбранного врача, что меня сбивает с толку. В очередной раз благодарим за помощь. - person user2076367; 02.05.2013
comment
Ваша цель состоит в том, чтобы показать всех пациентов для указанного врача, верно? Итак, вы хотите найти объекты Patient. Но тест заключается в том, что отношения пациента «доктор» устанавливаются с интересующим вас врачом (что и делает мой предикат). - person Wain; 02.05.2013
comment
Понимать. Я только что реализовал ваши предложения. Второй контроллер табличного представления возвращает всех пациентов. Не просто пациенты для выбранного врача. Какие-либо предложения? - person user2076367; 02.05.2013
comment
Когда FRC создан, убедитесь, что у вас установлен врач, чтобы предикат был создан правильно. Проверьте, установлен ли предикат в запросе на выборку. - person Wain; 02.05.2013
comment
Может быть, я неправильно спасаю пациента. Я не использую сгенерированных ядром оценщиков для определения ценности пациента. Это необходимо? - person user2076367; 02.05.2013
comment
Я пока не могу использовать чат в стеке. Могу ли я отправить вам свою электронную почту, чтобы мы могли общаться? - person user2076367; 02.05.2013
comment
_aNewPatient.patientName = self.patientNameField.text; Это все, что я делаю для установки пациента. Объект «Доктор» был передан в контроллер модального представления addPatient через переход от контроллера табличного представления «Доктор». - person user2076367; 02.05.2013
comment
вот что я думаю. Я неправильно связал пациента, которого добавил с врачом - person user2076367; 02.05.2013
comment
Я считаю, что правильно установил эту связь в модели данных. - person user2076367; 02.05.2013
comment
хорошее предложение. Я ввел NSLog(@Doctor Name: %@, self.patient.doctor) в табличном представлении cellForRowAtIndex и получил значение null. - person user2076367; 02.05.2013
comment
Хорошо, я вернусь и посмотрю, что я сделал не так. Еще раз спасибо за ваше время. Я знаю, что это намного больше, чем вы хотели бы потратить, но я ценю вашу помощь. - person user2076367; 02.05.2013
comment
Просто решил сообщить вам, что я исправил проблему, и теперь все работает и обновляется должным образом. Я не знаю, как удалить все эти комментарии, поэтому, пожалуйста, сделайте это. Миллион благодарностей за помощь. - person user2076367; 02.05.2013
comment
ненавижу задавать еще один глупый вопрос, но как я могу принять ваше решение? - person user2076367; 03.05.2013