繁体   English   中英

iOS / iPhone CoreData关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM