ОСНОВНЫЕ ДАННЫЕ Связь «многие ко многим». Как обновить или установить отношения?

У меня есть 2 объекта Locations и Items. Связь многие ко многим.

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

Я разбираю 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];

person Rouslan Karimov    schedule 05.10.2011    source источник


Ответы (1)


Вы должны подклассифицировать свой 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];
person Mundi    schedule 05.10.2011
comment
Да, у меня есть эти методы. но мой вопрос в том, как я на самом деле устанавливаю существующее местоположение для элемента, который я создаю. - person Rouslan Karimov; 06.10.2011
comment
Я хотел сказать, что я не хочу добавлять Location , что мне делать, если он уже существует, поэтому я хочу связать элемент с существующим местоположением. Или это именно то, что он делает? - person Rouslan Karimov; 06.10.2011
comment
Правильно, это именно то, что он делает. Он просто устанавливает связь (отношение) между существующими экземплярами сущностей. - person Mundi; 06.10.2011
comment
Спасибо за помощь и ответы на все мои вопросы - person Rouslan Karimov; 06.10.2011
comment
@tristan Вам нужно настроить модель, а затем сгенерировать файлы классов управляемых объектов — методы будут сгенерированы автоматически. - person Mundi; 27.02.2013
comment
Мои старые подклассы NSManagedObject имеют пользовательские методы. Если я воссоздам эти управляемые подклассы, как сохранить пользовательские методы? Спасибо. - person tristan; 27.02.2013
comment
Вы должны переместить свои пользовательские методы в отдельные файлы по категориям. Таким образом, вы можете легко регенерировать классы управляемых объектов! - person Mundi; 28.02.2013