Я пытался найти хороший учебник CoreData, который фокусируется на более продвинутых базах данных, которые имеют отношения один ко многим и многие ко многим. Из того, что я прочитал, CoreData скрывает среднюю таблицу, которая обычно бывала в отношениях «многие ко многим». Но мой вопрос больше о том, как установить отношения «один ко многим» с помощью CoreData.
Часть моей базы данных состоит из таблицы категорий и таблицы элементов. В одной категории может быть много предметов.
В моей программе я дохожу до того, что пользователь выбирает категорию, затем появляется список, показывающий все элементы, которые должны быть в этой категории.
Я могу отлично добавить элемент в таблицу, это когда я пытаюсь добавить элемент в таблицу с отношением к категории, когда возникают проблемы / сбои.
Должен ли элемент сначала быть полностью сохранен в базе данных, затем повторно захватить его и установить отношение?
Код:
[item.m]
@interface ITEM : NSManagedObject
{
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) CATEGORY * category;
@end
[/ item.m]
[category.m]
@interface CATEGORY : NSManagedObject
{
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet* items;
@end
@interface CATEGORY (CoreDataGeneratedAccessors)
- (void)addItemObject:(item *)value;
- (void)removeItemObject:(item *)value;
- (void)addItems:(NSSet *)value;
- (void)removeItems:(NSSet *)value;
@end
[/ category.m] * * 1 021
Ни один из CoreDataGeneratedAccessors не реализован мной, я предполагаю, что они уже созданы и скрыты.
Я пытался установить отношения в обоих направлениях, один раз из КАТЕГОРИИ и один раз из ПУНКТА
то есть
[[собственная категория] addItemObject: [собственный элемент]];
а также
[[self item] setCategory: [собственная категория]];
Ни то, ни другое ... Я получил ошибку, подобную этой:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'category' between objects in different contexts (source = <NSManagedObject: 0x614b660> (entity: item; id: 0x61558f0 <x-coredata:///item/tF691713B-18B1-4D28-93CC-40327353C08F3> ; data: {
category = nil;
name = TestName;
}) , destination = <CATEGORY: 0x4d55c20> (entity: category; id: 0x4d55050 <x-coredata://188D1CD9-6CC0-47EF-9C2A-A5DDDB1FAA24/category/p1> ; data: {
items = "<relationship fault: 0x4da4800 'items'>";
name = "Test Category";
}))'
Так что я думаю, что вопрос будет в следующем: где я иду не так, и есть ли действительно хороший учебник, который просматривает примеры CoreData, которые имеют более одной таблицы и на самом деле имеют отношение один ко многим (и что такое ссылка)