#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 и для выполнения определенных действий?