Core data 核心数据多对多关系。如何更新或设置关系?

Core data 核心数据多对多关系。如何更新或设置关系?,core-data,many-to-many,entity-relationship,nsmanagedobject,nsmanagedobjectcontext,Core Data,Many To Many,Entity Relationship,Nsmanagedobject,Nsmanagedobjectcontext,我有2个实体位置和项目。多对多关系 因此,每个项目可以有多个位置,任何位置都可以有多个项目 我正在解析项目的XML,然后尝试添加位置 我有ManagedObject项,我刚刚插入了位置,那么设置项位置的语法(代码)是什么 我在ManagedObject类中只看到添加和删除 以下是有效的 其中currentItem、location是两个ManagedObject,setItem_location_relationship是Items实体中关系的名称 NSFetchRequest *fetchRe

我有2个实体位置和项目。多对多关系

因此,每个项目可以有多个位置,任何位置都可以有多个项目

我正在解析项目的XML,然后尝试添加位置

我有ManagedObject项,我刚刚插入了位置,那么设置项位置的语法(代码)是什么

我在ManagedObject类中只看到添加和删除

以下是有效的 其中currentItem、location是两个ManagedObject,setItem_location_relationship是Items实体中关系的名称

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Locations"
                                                  inManagedObjectContext:managedObjectContext];
        [fetchRequest setEntity:entity];

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"location_id = %@",
                                  [locationsArray objectAtIndex:i]];
        [fetchRequest setPredicate:predicate];

        NSError *error = nil;
        NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
        if (fetchedObjects == nil) {

        }

        [fetchRequest release];

        Locations *location = [fetchedObjects objectAtIndex:0];

        NSSet *set = [NSSet setWithObject:location];

        [currentItem setItem_location_relationship:set];

您应该对
NSManagedObject
进行子类化。Xcode将为您编写类文件。然后一切都变得简单-Xcode将为您生成方法。假设您的实体被称为
项目
位置
,并且
项目
中的多对多关系被称为
位置
,那么
项目.h
中的这些定义应该如下所示:

- (void)addLocationsObject:(NSManagedObject *)value;
- (void)removeLocationsObject:(NSManagedObject *)value;
- (void)addLocations:(NSSet *)values;
- (void)removeLocations:(NSSet *)values;
因此,要添加位置对象,请执行以下操作:

Location *loc = [NSEntityDescription insertNewObjectForEntityForName:"Location"
   inManagedObjectContext:self.managedObjectContext];
// ... configure loc with info from the xml feed
// or use a fetched location object
[currentItem addLocationsObject:loc];

您应该对
NSManagedObject
进行子类化。Xcode将为您编写类文件。然后一切都变得简单-Xcode将为您生成方法。假设您的实体被称为
项目
位置
,并且
项目
中的多对多关系被称为
位置
,那么
项目.h
中的这些定义应该如下所示:

- (void)addLocationsObject:(NSManagedObject *)value;
- (void)removeLocationsObject:(NSManagedObject *)value;
- (void)addLocations:(NSSet *)values;
- (void)removeLocations:(NSSet *)values;
因此,要添加位置对象,请执行以下操作:

Location *loc = [NSEntityDescription insertNewObjectForEntityForName:"Location"
   inManagedObjectContext:self.managedObjectContext];
// ... configure loc with info from the xml feed
// or use a fetched location object
[currentItem addLocationsObject:loc];

是的,我有这些方法。但我的问题是如何将现有位置设置为我创建的项目。我想说的是,我不想添加位置,如果它已经存在,我该怎么办,所以我想将项目链接到现有位置。或者它到底是做什么的?对,这就是它做的。它只是在实体的现有实例之间建立链接(“关系”)。感谢您的帮助并回答我的所有问题questions@tristan您需要设置模型,然后生成托管对象类文件-这些方法将自动生成。是的,我有这些方法。但我的问题是如何将现有位置设置为我创建的项目。我想说的是,我不想添加位置,如果它已经存在,我该怎么办,所以我想将项目链接到现有位置。或者它到底是做什么的?对,这就是它做的。它只是在实体的现有实例之间建立链接(“关系”)。感谢您的帮助并回答我的所有问题questions@tristan您需要设置模型,然后生成托管对象类文件——这些方法将自动生成。