大佬教程收集整理的这篇文章主要介绍了ios – 核心数据:插入一对多关系,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Restaurant: @interface Restaurant :NSObject @property (nonatomic,strong) NSString *name; @property (nonatomic,strong) NSMutableArray *user_reviews; /* One to Many Relation to Review Entity*/ @end Review: @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.
但是这会产生大量的冗余代码.不应该有更有效的方式来做到这一点吗?
评论:
在餐厅:
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; @end Review: @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 – 核心数据:插入一对多关系所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。