Основные проблемы моделирования данных (как обновить атрибут на основе отношения отношения?) - PullRequest
1 голос
/ 23 февраля 2011

У меня есть сущность (Заказ), которая имеет отношение ко многим с Элементом сущности, которая имеет отношение ко многим с примечанием к сущности. Если цена для примечания изменяется или добавляется примечание, атрибут «цена» для соответствующего ордера должен обновиться.

В настоящее время мое решение состоит в том, чтобы все объекты Order подписались на уведомления NSManagedObjectContextDidChange и проверили все вставленные / измененные объекты, чтобы увидеть, является ли какой-либо из этих объектов одной из заметок элемента Order. Тем не менее, это очень неэффективно и хакерски, и приводит к еще нескольким проблемам с производительностью, которые можно оптимизировать, но я начинаю понимать, что мое решение - это то, что неисправно, а не обязательно проблемы.

Итак, как лучше это сделать?

РЕДАКТИРОВАТЬ: Чтобы ответить на вопросы, поднятые Рогом: я собираюсь распространить изменения в данных модели, которые наблюдаются контроллерами представления через KVO. Проблема, которую я замечаю, состоит в том, что, если цена Ноты, относящейся к Предмету, корректируется, нет возможности учесть это в Базовых данных. Если я использую keyPathsForAffectingPrice для Item и возвращаю «заметки», это учитывается только при добавлении / удалении заметок, а не при корректировке цены заметки.

Если бы это не были Базовые данные, я бы написал свой собственный метод доступа по цене примечания, чтобы просто сказать [self.item willChangeValueForKey: @ "price"], self.price = x, [self.item didChangeValueForKey: @ " цена"]; но это невозможно, так как я не могу создавать собственные средства доступа в Core Data, верно?

1 Ответ

2 голосов
/ 24 февраля 2011

Нам, вероятно, понадобится больше информации о вашем коде, чтобы иметь возможность помочь - то есть вы ищете способы распространения изменений в данных модели или в пользовательском интерфейсе?

Используете ли вы в настоящее время fetchedResultsController?

На мой взгляд, если ваш Заказ содержит Предметы, а Предметы содержат Заметки, любые обновления ваших «дочерних» атрибутов вступят в силу немедленно (при условии, что у вас правильно настроены обратные отношения).

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

...