Как правильно установить отношения в Базовых Данных при использовании setValue, и данные уже существуют

Скажем, у меня есть два объекта: Статьи и Категории со много-многими отношения между двумя. Ради этого примера все соответствующие категории были уже добавлены к хранилищу данных. Когда цикличное выполнение через данные, которые содержат редактирования для статей, существует информация отношений категории, которая должна быть сохранена.

Я был планированием использования -setValue метод в Article класс для установки отношений как так:

- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    if([key isEqualToString:@"categories"]){
        NSLog(@"trying to set categories...");
    }
}

Проблема - это value не a Category, это - просто строка (или массив строк) исполнение обязанностей категории. Я мог, конечно, сделать поиск в рамках этого метода для каждой категории и присвоить его, но это кажется неэффективным при обработке целого набора статей сразу. Другая опция состоит в том, чтобы заполнить массив всех возможных категорий и просто отфильтровать, но мой вопрос состоит в том, где сохранить тот массив? Если это - метод класса для Article? Есть ли способ передать в дополнительных данных -setValue метод? Есть ли другой, более оптимальный вариант для установки отношений, о которых я не думаю?

Спасибо за помощь.

5
задан ern 9 June 2010 в 05:02
поделиться

2 ответа

Почему вы реализуете setValue: forKey :? У вас должна быть связь между этими двумя объектами, которая устанавливается как «многие ко многим» и работает напрямую с отношениями. Здесь похоже, что вы делаете это на собственном горьком опыте.

Какова ваша конечная цель с этим кодом?

Обновление

Если я правильно вас понял, у вас есть большой двоичный объект данных JSON, и вы хотите превратить его в граф объектов, и он правильно соответствует этому графу объектов? Если да, посмотрите, пожалуйста, на код, который я написал в этом другом ответе:

JSON и основные данные на iPhone

В этом ответе я покажу, как рекурсивно создавать и деконструировать граф NSManagedObject в структуру JSON и из нее. Это немного проще, чем путь, по которому вы идете прямо сейчас.

4
ответ дан 14 December 2019 в 13:27
поделиться

Похоже, у вас определено отношение 1: 1, поэтому вы пытаетесь сказать, что статья принадлежит одной и только одной категории.

Когда вы заполняете один объект, вам может понадобиться создать другой; поэтому при создании статьи вам нужно будет проверить свое основное хранилище данных на предмет объекта правильного типа, и если он не существует, вы создаете его. Когда у вас есть объект, существующий ранее или только что созданный, вы либо назначаете (отношение одного) его отношению ivar Category *, либо (отношение многих) добавляете его в NSSet *, выражая отношение.

Итак, да, вам действительно нужно найти и назначить фактический объект, поскольку вы должны создать отношение к объекту в контексте управляемого объекта, и если оно не существует, оно должно быть создано до того, как это отношение может быть установлено.

2
ответ дан 14 December 2019 в 13:27
поделиться