2011-12-15 3 views
3

У меня довольно простой вопрос. Если у меня есть два объекта с отношением между ними (скажем, entityOne имеет отношение to-many к entityTwo). Когда я беру объект entityOne, он автоматически извлекает его отношения? Или мне нужно также их получить и назначить их соответствующему объекту?CoreData Fetching Entities

Я думал, что на самом деле было бы лучше спросить в чате с его простого вопроса, но у меня еще нет необходимой репутации.

Поскольку я не могу опубликовать свой вопрос, потому что он слишком короткий, я просто задаю еще один вопрос.

В том же проекте у меня есть rootViewController, который извлекает объекты. Теперь, если я хочу добавить событие, я должен отправить пользователя в другое представление, с textFields и т. Д. Я закончил создание массива «eventArray» для каждого из этих viewControllers, так как я не мог найти более эффективный способ сделать это. Допустим, что у меня в rootViewController есть NSMutableArray * eventsArray и в addEventViewController У меня также есть NSMutableArray * eventsArray, который устанавливается перед нажатием addEventViewController (addEventViewController.eventsArray = self.eventsArray). Как это сделать более эффективно? Я почти уверен, что это неправильный способ сделать это.

+3

См. Ответ @paulbailey для неисправной части. Для прохождения массива я бы не согласился с паулом и предположил, что вы делаете это правильно. Вы не увеличиваете использование памяти, поскольку вы просто передаете указатель долго. То, как вы это сделали, делает связь между вашими объектами более свободной, и это позволяет провести надлежащее тестирование. Если у вас просто есть массив в делетете приложения (singleton), у вас по существу есть глобальная переменная, которая сделает тестирование намного сложнее и уменьшит любое потенциальное повторное использование вашего объекта. –

+0

Да, я не использовал переменные в приложении appDelegate, потому что Пол Хегарти сказал, что для этого неплохо использовать appDelegate. Рад, что я делаю это правильно – lascort

+0

Все хорошие моменты, я отредаю эту глупость из моего ответа. – paulbailey

ответ

3

В ответ на ваш первый вопрос:

Эта ситуация обрабатывается Core Data автоматически, а механизм называется «вызвавшего отказ». У Apple есть some helpful documentation on this. Проще говоря, связанные объекты не извлекаются, но когда вы пытаетесь получить к ним доступ, Core Data автоматически извлекает их из постоянного хранилища.

Конечно, могут возникать ситуации, когда эта индивидуальная выборка связанных объектов (возможно, для отображения чего-либо о связанных объектах в таблице, например) замедляет ваше приложение.

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

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