Iphone 如何在CoreData中保存一对多关系?
我有一张桌子,如下所示Iphone 如何在CoreData中保存一对多关系?,iphone,ios,core-data,sqlite,one-to-many,Iphone,Ios,Core Data,Sqlite,One To Many,我有一张桌子,如下所示 @implementation ClubDetails @dynamic clubarea; @dynamic clubdealhere; @dynamic clubdescription; @dynamic clubdistance; @dynamic clubemail; @dynamic clubfacility; @dynamic clubfav; @dynamic clubid; @dynamic clublat; @dynamic clublogopath;
@implementation ClubDetails
@dynamic clubarea;
@dynamic clubdealhere;
@dynamic clubdescription;
@dynamic clubdistance;
@dynamic clubemail;
@dynamic clubfacility;
@dynamic clubfav;
@dynamic clubid;
@dynamic clublat;
@dynamic clublogopath;
@dynamic clubname;
@dynamic clubphone;
@dynamic cluburl;
@dynamic clubvenutype;
@dynamic clublong;
@dynamic clubdetailsimages;
- (void)addClubdetailsimagesObject:(ClubDetailsImages *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"ClubDetailsImages"] addObject:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
}
- (void)removeClubdetailsimagesObject:(ClubDetailsImages *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"ClubDetailsImages"] removeObject:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
}
- (void)addClubdetailsimages:(NSSet *)value {
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
[[self primitiveValueForKey:@"ClubDetailsImages"] unionSet:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}
- (void)removeClubdetailsimages:(NSSet *)value {
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
[[self primitiveValueForKey:@"ClubDetailsImages"] minusSet:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}
***ClubDetailsImages.h*** looks like
@class ClubDetails;
@interface ClubDetailsImages : NSManagedObject
@property (nonatomic, retain) NSString * images;
@property (nonatomic, retain) ClubDetails *clubdetailed;
***ClubDetailsImages.m*** looks like
@implementation ClubDetailsImages
@dynamic images;
@dynamic clubdetailed;
For Saving, I wrote code like this
-(void)saveClubDetails:(NSMutableArray*)allClubs{
NSError *error;
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"ClubDetails" inManagedObjectContext:context]];
[fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSArray *allObject = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject * obj in allObject) {
[context deleteObject:obj];
}
NSError *saveError = nil;
[context save:&saveError]; // NO MORE VALUE IS DB
for (int x = 0; x<[allClubs count]; x++) {
ClubDetails *club = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetails"
inManagedObjectContext:context];
ClubDetails2 *ob = (ClubDetails2*)[allClubs objectAtIndex:x];
club.clubarea = [NSString stringWithFormat:@"%@", ob.clubarea];
club.clubdealhere = [NSString stringWithFormat:@"%@", ob.clubdealhere];
club.clubdescription = [NSString stringWithFormat:@"%@", ob.clubdescription];
club.clubdistance = [NSString stringWithFormat:@"%@", ob.clubdistance];
club.clubemail = [NSString stringWithFormat:@"%@", ob.clubemail];
club.clubfacility = [NSString stringWithFormat:@"%@", ob.clubfacility];
club.clubfav = [NSString stringWithFormat:@"%@", ob.clubfav];
club.clubid = [NSString stringWithFormat:@"%@", ob.clubid];
club.clublat = [NSString stringWithFormat:@"%@", ob.clublat];
club.clublogopath = [NSString stringWithFormat:@"%@", ob.clublogopath];
club.clubname = [NSString stringWithFormat:@"%@", ob.clubname];
club.clubphone = [NSString stringWithFormat:@"%@", ob.clubphone];
club.cluburl = [NSString stringWithFormat:@"%@", ob.cluburl];
club.clubvenutype = [NSString stringWithFormat:@"%@", ob.clubvenutype];
club.clublong = [NSString stringWithFormat:@"%@", ob.clublong];
ClubDetailsImages *clubImages = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetailsImages"
inManagedObjectContext:context];
clubImages.images = [NSString stringWithFormat:@"veer url image"];
[club addClubdetailsimagesObject:clubImages];
}
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
// NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Clubs"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedArray = [context executeFetchRequest:fetchRequest error:&error];
NSLog(@"COUNT of arary is %d", [fetchedArray count]);
for (Clubs *info in fetchedArray) {
NSLog(@" Duaan Name ~~~~ : %@", info.clubname);
}
}
我有一个XML,其中提供了俱乐部的详细信息。每个标记都有一个值,但图像标记包含动态图像
在此之后,我的对象如下所示
@implementation ClubDetails
@dynamic clubarea;
@dynamic clubdealhere;
@dynamic clubdescription;
@dynamic clubdistance;
@dynamic clubemail;
@dynamic clubfacility;
@dynamic clubfav;
@dynamic clubid;
@dynamic clublat;
@dynamic clublogopath;
@dynamic clubname;
@dynamic clubphone;
@dynamic cluburl;
@dynamic clubvenutype;
@dynamic clublong;
@dynamic clubdetailsimages;
- (void)addClubdetailsimagesObject:(ClubDetailsImages *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"ClubDetailsImages"] addObject:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
}
- (void)removeClubdetailsimagesObject:(ClubDetailsImages *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"ClubDetailsImages"] removeObject:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
}
- (void)addClubdetailsimages:(NSSet *)value {
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
[[self primitiveValueForKey:@"ClubDetailsImages"] unionSet:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}
- (void)removeClubdetailsimages:(NSSet *)value {
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
[[self primitiveValueForKey:@"ClubDetailsImages"] minusSet:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}
***ClubDetailsImages.h*** looks like
@class ClubDetails;
@interface ClubDetailsImages : NSManagedObject
@property (nonatomic, retain) NSString * images;
@property (nonatomic, retain) ClubDetails *clubdetailed;
***ClubDetailsImages.m*** looks like
@implementation ClubDetailsImages
@dynamic images;
@dynamic clubdetailed;
For Saving, I wrote code like this
-(void)saveClubDetails:(NSMutableArray*)allClubs{
NSError *error;
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"ClubDetails" inManagedObjectContext:context]];
[fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSArray *allObject = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject * obj in allObject) {
[context deleteObject:obj];
}
NSError *saveError = nil;
[context save:&saveError]; // NO MORE VALUE IS DB
for (int x = 0; x<[allClubs count]; x++) {
ClubDetails *club = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetails"
inManagedObjectContext:context];
ClubDetails2 *ob = (ClubDetails2*)[allClubs objectAtIndex:x];
club.clubarea = [NSString stringWithFormat:@"%@", ob.clubarea];
club.clubdealhere = [NSString stringWithFormat:@"%@", ob.clubdealhere];
club.clubdescription = [NSString stringWithFormat:@"%@", ob.clubdescription];
club.clubdistance = [NSString stringWithFormat:@"%@", ob.clubdistance];
club.clubemail = [NSString stringWithFormat:@"%@", ob.clubemail];
club.clubfacility = [NSString stringWithFormat:@"%@", ob.clubfacility];
club.clubfav = [NSString stringWithFormat:@"%@", ob.clubfav];
club.clubid = [NSString stringWithFormat:@"%@", ob.clubid];
club.clublat = [NSString stringWithFormat:@"%@", ob.clublat];
club.clublogopath = [NSString stringWithFormat:@"%@", ob.clublogopath];
club.clubname = [NSString stringWithFormat:@"%@", ob.clubname];
club.clubphone = [NSString stringWithFormat:@"%@", ob.clubphone];
club.cluburl = [NSString stringWithFormat:@"%@", ob.cluburl];
club.clubvenutype = [NSString stringWithFormat:@"%@", ob.clubvenutype];
club.clublong = [NSString stringWithFormat:@"%@", ob.clublong];
ClubDetailsImages *clubImages = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetailsImages"
inManagedObjectContext:context];
clubImages.images = [NSString stringWithFormat:@"veer url image"];
[club addClubdetailsimagesObject:clubImages];
}
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
// NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Clubs"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedArray = [context executeFetchRequest:fetchRequest error:&error];
NSLog(@"COUNT of arary is %d", [fetchedArray count]);
for (Clubs *info in fetchedArray) {
NSLog(@" Duaan Name ~~~~ : %@", info.clubname);
}
}
ClubDetails.h
#导入
#进口
#导入“ClubDetailsImages.h”
@接口ClubDetails:NSManagedObject
@属性(非原子,保留)NSString*clubarea;
@属性(非原子,保留)NSString*clubdealhere;
@属性(非原子,保留)NSString*clubdescription;
@属性(非原子,保留)NSString*clubdistance;
@属性(非原子,保留)NSString*clubemail;
@属性(非原子,保留)NSString*clubfacility;
@属性(非原子,保留)NSString*clubfav;
@属性(非原子,保留)NSString*clubid;
@属性(非原子,保留)NSString*clublat;
@属性(非原子,保留)NSString*clublogopath;
@属性(非原子,保留)NSString*clubname;
@属性(非原子,保留)NSString*clubphone;
@属性(非原子,保留)NSString*cluburl;
@属性(非原子,保留)NSString*clubvenutype;
@属性(非原子,保留)NSString*clublong;
@属性(非原子,保留)NSSet*clubdetailsimages;
@结束
@接口ClubDetails(CoreDataGeneratedAccessor)
-(void)addClubDetailsAgeSObject:(ClubDetailsAges*)值;
-(void)RemoveClubDetailsAgeSObject:(ClubDetailsAges*)值;
-(void)addClubdetailsimages:(NSSet*)值;
-(void)RemoveClubDetailsAges:(NSSet*)值;
其.m文件如下所示
@implementation ClubDetails
@dynamic clubarea;
@dynamic clubdealhere;
@dynamic clubdescription;
@dynamic clubdistance;
@dynamic clubemail;
@dynamic clubfacility;
@dynamic clubfav;
@dynamic clubid;
@dynamic clublat;
@dynamic clublogopath;
@dynamic clubname;
@dynamic clubphone;
@dynamic cluburl;
@dynamic clubvenutype;
@dynamic clublong;
@dynamic clubdetailsimages;
- (void)addClubdetailsimagesObject:(ClubDetailsImages *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"ClubDetailsImages"] addObject:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
}
- (void)removeClubdetailsimagesObject:(ClubDetailsImages *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"ClubDetailsImages"] removeObject:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
}
- (void)addClubdetailsimages:(NSSet *)value {
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
[[self primitiveValueForKey:@"ClubDetailsImages"] unionSet:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}
- (void)removeClubdetailsimages:(NSSet *)value {
[self willChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
[[self primitiveValueForKey:@"ClubDetailsImages"] minusSet:value];
[self didChangeValueForKey:@"ClubDetailsImages" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}
***ClubDetailsImages.h*** looks like
@class ClubDetails;
@interface ClubDetailsImages : NSManagedObject
@property (nonatomic, retain) NSString * images;
@property (nonatomic, retain) ClubDetails *clubdetailed;
***ClubDetailsImages.m*** looks like
@implementation ClubDetailsImages
@dynamic images;
@dynamic clubdetailed;
For Saving, I wrote code like this
-(void)saveClubDetails:(NSMutableArray*)allClubs{
NSError *error;
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"ClubDetails" inManagedObjectContext:context]];
[fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSArray *allObject = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject * obj in allObject) {
[context deleteObject:obj];
}
NSError *saveError = nil;
[context save:&saveError]; // NO MORE VALUE IS DB
for (int x = 0; x<[allClubs count]; x++) {
ClubDetails *club = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetails"
inManagedObjectContext:context];
ClubDetails2 *ob = (ClubDetails2*)[allClubs objectAtIndex:x];
club.clubarea = [NSString stringWithFormat:@"%@", ob.clubarea];
club.clubdealhere = [NSString stringWithFormat:@"%@", ob.clubdealhere];
club.clubdescription = [NSString stringWithFormat:@"%@", ob.clubdescription];
club.clubdistance = [NSString stringWithFormat:@"%@", ob.clubdistance];
club.clubemail = [NSString stringWithFormat:@"%@", ob.clubemail];
club.clubfacility = [NSString stringWithFormat:@"%@", ob.clubfacility];
club.clubfav = [NSString stringWithFormat:@"%@", ob.clubfav];
club.clubid = [NSString stringWithFormat:@"%@", ob.clubid];
club.clublat = [NSString stringWithFormat:@"%@", ob.clublat];
club.clublogopath = [NSString stringWithFormat:@"%@", ob.clublogopath];
club.clubname = [NSString stringWithFormat:@"%@", ob.clubname];
club.clubphone = [NSString stringWithFormat:@"%@", ob.clubphone];
club.cluburl = [NSString stringWithFormat:@"%@", ob.cluburl];
club.clubvenutype = [NSString stringWithFormat:@"%@", ob.clubvenutype];
club.clublong = [NSString stringWithFormat:@"%@", ob.clublong];
ClubDetailsImages *clubImages = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetailsImages"
inManagedObjectContext:context];
clubImages.images = [NSString stringWithFormat:@"veer url image"];
[club addClubdetailsimagesObject:clubImages];
}
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
// NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Clubs"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedArray = [context executeFetchRequest:fetchRequest error:&error];
NSLog(@"COUNT of arary is %d", [fetchedArray count]);
for (Clubs *info in fetchedArray) {
NSLog(@" Duaan Name ~~~~ : %@", info.clubname);
}
}
@实现ClubDetails
@动态球团;
@动态集群;
@动态聚类描述;
@动态俱乐部距离;
@动态集群邮件;
@动态俱乐部设施;
@动态clubfav;
@动态俱乐部投标;
@动态集群;
@动态Clublogpath;
@动态集群名称;
@动态集群电话;
@动态俱乐部;
@动态clubvenutype;
@动态聚类;
@动态聚类分析;
-(void)addClubDetailsAgeSObject:(ClubDetailsAges*)值{
NSSet*changedObjects=[[NSSet alloc]initWithObjects:&值计数:1];
[self-willChangeValueForKey:@“ClubDetailsAges”带有设置突变:NSKeyValueUnionSetMutation使用对象:changedObjects];
[[self-primitiveValueForKey:@“ClubDetailsAges”]addObject:value];
[self-didChangeValueForKey:@“ClubDetailsAges”带有设置突变:NSKeyValueUnionSetMutation使用对象:changedObjects];
}
-(void)RemoveClubDetailsAgeSObject:(ClubDetailsAges*)值{
NSSet*changedObjects=[[NSSet alloc]initWithObjects:&值计数:1];
[self Will ChangeValueForkey:@“ClubDetailsAges”带有设置突变:NSKeyValueMinssSetMutation使用对象:changedObjects];
[[self-primitiveValueForKey:@“ClubDetailsAges”]removeObject:value];
[self-didChangeValueForKey:@“ClubDetailsAges”带有设置突变:NSKeyValueMinssSetMutation使用对象:changedObjects];
}
-(void)addClubDetailsAges:(NSSet*)值{
[self-willChangeValueForKey:@“ClubDetailsAges”带有setMutation:NSKeyValueUnionSetMutation使用对象:值];
[[self-primitiveValueForKey:@“ClubDetailsAges”]unionSet:value];
[self-didChangeValueForKey:@“ClubDetailsAges”带有setMutation:NSKeyValueUnionSetMutation UsingObject:value];
}
-(无效)RemoveClubDetailsAges:(NSSet*)值{
[self-willChangeValueForKey:@“ClubDetailsAges”带有setMutation:nsKeyValueMinssSetMutation使用对象:value];
[[self-primitiveValueForKey:@“ClubDetailsAges”]最小集:值];
[self-didChangeValueForKey:@“ClubDetailsAges”带有setObstation:nsKeyValueMinssSetObstation使用对象:value];
}
***ClubDetailsImages.h***看起来像
@类簇尾;
@接口ClubDetailsImages:NSManagedObject
@属性(非原子,保留)NSString*图像;
@属性(非原子,保留)ClubDetails*clubdetailed;
***ClubDetailsImages.m***看起来像
@实现ClubDetailsImages
@动态图像;
@动态聚类分析;
为了节省时间,我编写了如下代码
-(void)saveClubDetails:(NSMutableArray*)所有俱乐部{
n错误*错误;
NSManagedObjectContext*上下文=[self-managedObjectContext];
NSFetchRequest*fetchRequest=[[NSFetchRequest alloc]init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@“ClubDetails”inManagedObjectContext:context]];
[fetchRequest SetIncludePropertyValue:否];//仅获取managedObjectID
NSArray*allObject=[context executeFetchRequest:fetchRequest错误:&错误];
用于(NSManagedObject*allObject中的对象){
[上下文删除对象:obj];
}
NSError*saveError=nil;
[context save:&saveError];//没有更多的值是DB
对于(int x=0;x
只需不断添加对象并将它们链接到ClubDetails,例如,假设您有一个来自某处的图像字符串数组
for (NSString *image in images)
{
ClubDetailsImages *clubImages = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetailsImages" inManagedObjectContext:context];
clubDetailsImages.image = image;
clubDetailsImages.clubdetailed = club;
}
不确定您在这里要问什么,但给出了一个ClubDetails实例:
NSSet *images = club.clubdetailsimages;
另外,为什么要实现addClubdetailsimagesObject等。这不是必需的。使用XCode生成实体类,您将看到这些方法没有创建
只需不断添加对象并将它们链接到ClubDetails,例如,假设您有一个来自某处的图像字符串数组
for (NSString *image in images)
{
ClubDetailsImages *clubImages = [NSEntityDescription insertNewObjectForEntityForName:@"ClubDetailsImages" inManagedObjectContext:context];
clubDetailsImages.image = image;
clubDetailsImages.clubdetailed = club;
}
不确定您在这里要问什么,但给出了一个ClubDetails实例:
NSSet *images = club.clubdetailsimages;
另外,为什么要实现addClubdetailsimagesObject等。这不是必需的。使用XCode生成实体类,您将看到这些方法没有创建。不确定问题出在哪里?您只向ClubDetailsImages
对象添加了一个图像(手动)。要在接收的数据上添加更多迭代,并根据需要创建clubdeailsimages
对象。获取应与访问关系和迭代集合一样简单。不确定问题出在哪里?您只添加了一个