0

У меня есть класс A (подкласс NSManagedObject), который имеет свойство класса B (также подкласс NSManagedObject), свойство @synthesize не @dynamic, нет никакой связи между A и B в моей модели, Я просто хочу, чтобы A сохранил ссылку на объект B, пока он (A) жив.
(Когда я первый извлечение объекта A из БД, его B свойство равно нулю)Ссылка Количество управляемых объектов

I Переопределение B значения свойства, поэтому при первом вызове он будет получать B объект из БД.

Теперь мне нужно сохранить результат выборки B?
Думаю, я слышал, что не стоит сохранять объекты, которыми управляет NSManagedObjectContext.

ответ

2

Нет проблем с удержанием NSManagedObject - сделайте это. Единственное, о чем нужно быть осторожным, - это то, что вы держите объект и его удаляете. Затем у вас есть ссылка на объект, но если вы попытаетесь прочитать или установить любое его значение, вы получите исключение. Поскольку это сложно сделать, Core Data удаляет распространение для вас, когда вы используете отношения Core Data.

Итак, как указано выше: используйте отношения. Нет ничего плохого в том, что у вас есть несколько отношений между A и B. Вам просто нужно иметь соответствующие обратные отношения.

Например, вы можете сделать что-то вроде этого:

Person 
    favoriteBook (to-1, inverse is favoriteByPersons) 
    authoredBooks (to-many, inverse is authors) 

Book 
    authors (to-many, inverse is authoredBooks) 
    favoriteByPersons (to-many, inverse is favoriteBook) 

Пусть Core Data делать тяжелую работу за вас. Управление отношениями является одной из вещей, на которые действительно хорошо справляется Core Data. Не пытайтесь копировать это самостоятельно.

+0

Спасибо :) Я не знал, что могу иметь две связи с одной и той же сущностью. – Eyal

0

Вы должны четко перейти к отношениям между A и B. Это то, что Core Data настроено для управления вами. Это проще, надежнее, и вам не нужно беспокоиться о проблемах с памятью.

+0

Проблема в том, что у меня уже есть отношение «многие» между А и В, поэтому у меня не может быть другого. – Eyal

+0

Вы пишете в своем вопросе: «Между« A »и« B »нет никакой связи. Так что же это теперь? Пожалуйста, отредактируйте вопрос и четко укажите, что вы хотите выполнить. – Mundi

Смежные вопросы