Обновление / настройка связей в основных данных, когда пользователи вводят данные из разных табличных представлений

#iphone #core-data #many-to-many #one-to-many #key-value-observing

#iPhone #основные данные #многие ко многим #один ко многим #наблюдение за ключом-значением

Вопрос:

В моем приложении core data есть 3 объекта: Критерии —>> Ранг (имеет 1 атрибут: criteriaRank) <<— Опция

Допустим, пользователь вводит несколько параметров в tableview, а затем переходит к другому tableview, где вводит некоторое количество критериев. Предполагается, что мое приложение должно вести себя так, что для каждого введенного пользователем критерия оно должно создавать объект Rank, чтобы, когда пользователь возвращается к options tableview и выбирает опцию, он должен позволять им ранжировать каждый введенный им критерий.

Прямо сейчас, когда я создаю новые критерии, я устанавливаю их следующим образом,

 //Create new Criteria and set its context
Criteria *newCriteria = [NSEntityDescription insertNewObjectForEntityForName:@"Criteria" inManagedObjectContext:context];


for (Option *anOption in sortedOptions) {
    Rank *newCriteriaRank = [NSEntityDescription insertNewObjectForEntityForName:@"Rank" inManagedObjectContext:context];

    [newCriteria addRankingsObject:newCriteriaRank];
    [anOption addRankingsObject: newCriteriaRank];
}
 

Но что тогда, если мне придется вернуться и добавить другой вариант?
Я думаю, я спрашиваю, каков хороший способ установить отношения так, чтобы каждая сторона обновлялась при изменении другой.

Я посмотрел в KVO и Notifications, но я не уверен, с чего именно начать.

Спасибо.

Ответ №1:

Выберите свою .xcdatamodel, выберите одну из сущностей. В разделе взаимосвязь выберите соответствующую взаимосвязь, а затем выберите обратную. Это поможет поддерживать ваш RFI.

Это предполагает, что у вас есть одно отношение к каждому объекту, которое указывает на другое. Если у вас нет связей для обоих объектов, вам придется добавить один, чтобы заставить инверсию работать должным образом.

Комментарии:

1. спасибо за быстрый ответ. Я всегда слежу за тем, чтобы все объекты, которые я создаю, имели обратные отношения, поскольку это рекомендация в соответствии с документами Apple. У меня все еще есть проблема, связанная с тем, что когда я добавляю новую опцию, она не создает и не устанавливает для нее объекты ранга. Есть ли лучшее место, где нужно установить это отношение?

2. Управляемые объекты не создаются автоматически для вас. Вам нужно вручную создавать объекты и устанавливать связи с помощью кода.

3. Думаю, я неправильно задал свой вопрос. Я создал управляемые объекты. Если вы посмотрите на приведенный выше код, каждый раз, когда он создает объект, управляемый критериями, он перебирает все параметры объекта, управляемого параметрами, и создает объект, управляемый рангом, и устанавливает обе стороны связи. Допустим, позже я решил передумать и удалить критерий и добавить новый, теперь у меня есть критерии без набора отношений. Я где-то читал в StackOverflow, чтобы использовать какой-то параметр обратного вызова, который будет возвращаться, перебирает уже созданные управляемые объекты,

4. создайте набор объектов ранга и установите связь, но я не уверен, как реализовать что-то подобное. Прошу прощения за неясность, учитывая отсутствие у меня опыта работы с objective-c / iOS, я не уверен, как описать, к чему я стремлюсь. Можно ли использовать KVO в качестве триггера для создания нового объекта Options и для выполнения определенных действий?