[英]iOS / iPhone CoreData Relationships
我一直在尝试找到一个很好的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]
我没有实现CoreDataGeneratedAccessors,我假设它们已经创建并隐藏了。
我尝试过两种方式设置关系,一次是从CATEGORY,一次是从ITEM,即[[self category] addItemObject:[self item]]; 以及[[self item] setCategory:[self category]];
都不起作用...我收到了这样的错误:
*** 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示例,这些示例具有多个表并且实际上具有一对多关系(以及什么是链接)?
在不同上下文中非法尝试在对象之间建立关系“类别”
有你的问题。 您不能在不同上下文之间建立关系。
您可以重构代码,使其仅使用一个NSManagedObjectContext,也可以在将类别分配之前将其合并到“主上下文”中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.