CoreData один ко многим и обратная проблема отношений - PullRequest
7 голосов
/ 16 сентября 2009

Я пытаюсь импортировать набор данных в CoreData persistentStore. Это данные только для чтения, которые будут представлены пользователю во время выполнения.

У меня есть объект под названием «Категория», который имеет отношение «один ко многим» с объектом «Элемент», который, в свою очередь, имеет обратную связь с категорией.

Когда я добавляю элементы в контекст, как я могу связать их с правильной категорией? Я вижу в SQLite dB, что это делается путем добавления поля Category в таблицу Item, и, вероятно, использует первичный ключ Categories для отношения. Но ПК негласно ... есть ли способ установить соединение?

Я также вижу в своем классе Category, что есть методы, сгенерированные CoreData для добавления Предметов, но я предполагаю, что это также закулисные методы, которые позволяют CoreData поддерживать отношения:

    @interface Category (CoreDataGeneratedAccessors)

- (void)addItemObject:(Item *)value;
- (void)removeItemObject:(Item *)value;
- (void)addItems:(NSSet *)value;
- (void)removeItems:(NSSet *)value;

@end

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

Спасибо

JK

1 Ответ

9 голосов
/ 17 сентября 2009

Есть разные возможности. Если у вас уже есть объект Category (например, полученный с помощью запроса на выборку), и предполагается, что переменные

Category *category;
Item *item;

тогда вы просто делаете следующее:

item.category = category;

или

[category setValue: category forKey:@"category"];

и все готово, поскольку Core Data автоматически устанавливает обратные отношения.

Если у вас нет объекта Category или вы хотите вставить новый, сделайте следующее:

// Create a new instance of the entity 
Category *category = (Category *) [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
// add all of the category properties, then set the relationship
// for instance set the category name
[category setValue:@"myCategoryName" forKey:@"name"];
[category setValue:item forKey:@"item"];

Затем вы устанавливаете этот объект Category для вашего объекта Item точно так же, как и раньше. Наконец, методы, которые вы показали, не используются Core Data за кулисами: эти методы доступны вам, так что вы также можете делать следующее:

[category addItemObject:item];

или обратное:

[item addCategoryObject:category];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...