ОСНОВНЫЕ ДАННЫЕ Отношение многих ко многим.Как обновить или установить отношения? - PullRequest
0 голосов
/ 06 октября 2011

У меня есть 2 сущности Локации и Предметы.Отношение многие ко многим.

Таким образом, у каждого элемента может быть несколько местоположений, а в любом месте может быть несколько элементов.

Я анализирую XML элементов, а затем пытаюсь добавить местоположения.

Итак, у меня есть элемент ManagedObject, и я только что вставил местоположение, так какой же синтаксис (код) для установки местоположения элементов?

Я вижу только добавление и удаление в классе ManagedObject.

Ниже допустимо, если 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 Ответ

3 голосов
/ 06 октября 2011

Вы должны создать подкласс вашего NSManagedObject.Xcode напишет файлы классов для вас.Тогда все становится легко - Xcode сгенерирует методы для вас.Предполагая, что ваши сущности называются Item и Location, а отношение «многие-многие» в Item называется locations, эти определения в Item.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];
...