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

时间:2011-10-05 22:35:24

标签: core-data many-to-many entity-relationship nsmanagedobject nsmanagedobjectcontext

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

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

我正在解析项目的XML而不是尝试添加位置。

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

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

以下是有效的 其中currentItem,location是两个ManagedObjects,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];

1 个答案:

答案 0 :(得分:3)

您应该将NSManagedObject作为子类。 Xcode将为您编写类文件。然后一切都变得简单 - Xcode将为您生成方法。假设您的实体被称为ItemLocationItem中的多对多关系称为locationsItem.h中的这些定义应如下所示:< / p>

- (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];