Restaurant:@interface Restaurant :NSObject@property (nonatomic,strong) Nsstring *name;@property (nonatomic,strong) NSMutableArray *user_revIEws; /* One to Many Relation to RevIEw Entity*/@endRevIEw:@interface RevIEw : NSObject@property (nonatomic,strong) Nsstring *rating;@property (nonatomic,strong) Nsstring *revIEw_text;@property (nonatomic,strong) User *user;@end
我发现使用NSMutableSet插入的类似问题,但是我无法为NSMutable Array实现相同的问题.
目前我的插入代码看起来像:
NSManagedobjectContext *context = [self managedobjectContext];Restaurant *rest = [NSEntityDescription insertNewObjectForEntityForname:@"Restaurant" inManagedobjectContext:context];rest.name = restaurant.name;
我通过JsON获取餐厅及其评论的数据,并将其存储在临时类中,然后将其保存到CORE数据库.
如何插入有一对多关系的数据?
编辑:
目前我收到一个类的形式的数据,它定义了user_revIEw属性
NSMutableArray *user_revIEws;
我正在尝试实现这个相同的类插入核心数据模型.
但核心数据模型使用NSSet而不是NSMutableArray.
一个粗暴的方法是复制所有具有相同属性的类,而不是使用NSMutableArray,我将其更改为NSSet.
但是这会产生大量的冗余代码.不应该有更有效的方式来做到这一点吗?
评论:
在餐厅:
如果你让xcode生成你的课程,它将如下所示:
Restaurant:@interface Restaurant : NSManagedobject@property (nonatomic,strong) NSSet *user_revIEws; /* One to Many Relation to RevIEw Entity*/@interface Restaurant(CoreDataGeneratedAccessors)- (voID)addUser_revIEwsObject:(RevIEw *)value;- (voID)removeUser_revIEwsObject:(RevIEw *)value;- (voID)addUser_revIEws:(NSSet *)value;- (voID)removeUser_revIEws:(NSSet *)value;@endRevIEw:@interface RevIEw : NSManagedobject@property (nonatomic,strong) User *user;@property (nonatomic,strong) Restaurant *restaurant;@end
你的电话将是:
NSManagedobjectContext *context = [self managedobjectContext];Restaurant *rest = [NSEntityDescription insertNewObjectForEntityForname:@"Restaurant" inManagedobjectContext:context];rest.name = restaurant.name;RevIEw *rev = [NSEntityDescription insertNewObjectForEntityForname:@"RevIEw" inManagedobjectContext:context];rev.rating = @"1";rev.revIEw_text = @"nomnomnom";[rest addUser_revIEwsObject:rev];// or rev.restaurant = restaurant; one of both is enought as far as I remember// save your context
编辑
如果它必须是一个NSMutableArray,它不能是一个ralation.
那些总是NSSets(如果x到n)或目的地类.使用NSMutableArray具有集合和自动处理的优点.
但是如果你真的要存储在NSMutableArray中,我建议至少通过一个revIEwID属性(唯一)来扩展你的RevIEw类,并将NSMutableArray存储为可变形.
//RevIEw:@interface RevIEw : NSManagedobject@property (nonatomic,strong) NSNumber *revIEwID;@end//Restaurant.h:@interface Restaurant : NSManagedobject@property (nonatomic,strong) NSSet *user_revIEws; // Set of NSNumbers- (voID)addUser_revIEwsObject:(RevIEw *)value;- (voID)addUser_revIEwsID:(NSNumber *)value;- (voID)removeUser_revIEwsObject:(RevIEw *)value;- (voID)addUser_revIEws:(NSMutableArray *)value;- (voID)removeUser_revIEws:(NSMutableArray *)value;@end//Restaurant.m:- (voID)addUser_revIEwsObject:(RevIEw *)value{ [self addUser_revIEwsID:value.revIEwID];}- (voID)addUser_revIEwsID:(NSNumber *)value{ if(![self.user_revIEws containsObject:value]; [self.user_revIEws addobject:value];}- (voID)removeUser_revIEwsObject:(NSNumber *)value{ // follow upper logic and implement yourself}- (voID)addUser_revIEws:(NSMutableArray *)value{ // follow upper logic and implement yourself}- (voID)removeUser_revIEws:(NSMutableArray *)value{ // follow upper logic and implement yourself}总结
以上是内存溢出为你收集整理的ios – 核心数据:插入一对多关系全部内容,希望文章能够帮你解决ios – 核心数据:插入一对多关系所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)