Отношения CoreData для iOS / iPhone - PullRequest
0 голосов
/ 01 марта 2011

Я пытался найти хороший учебник 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, которые имеют более одной таблицы и на самом деле имеют отношение один ко многим (и что такое ссылка)

1 Ответ

3 голосов
/ 01 марта 2011

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

Ваша проблема.Вы не можете иметь отношения между различными контекстами.

Вы можете либо реорганизовать свой код, чтобы он использовал только один NSManagedObjectContext, либо объединить элемент в «основной контекст», прежде чем назначить ему категорию.

...