2013-04-05 2 views
1

У меня есть приложение для списка продуктов, и я планирую использовать Core Data с ним.Как следует использовать основные данные с моим «необычным» объектом?

У меня есть продуктовый Item абстрактный класс, который имеет три подкласса: RecipeItem, QuickAddItem и HybridItem. Первые два подкласса являются простыми, но HybridClass отличается - это только ivar представляет собой массив другойRecipeItem и QuickAddItem объектов.

Вот как он используется: когда список покупок были созданы объекты товара, все Item объекты с типами соответствия единицы (например, 1 фунт сахара, 1/2 фунта сахара) помещаются в массив NSArray *items и HybridItem является инициализируется с помощью метода:

- (id)initWithItems:(NSArray *)items 

в этом initWithItems: методе элементы в массиве items массируют и скомбинированы таким образом, он будет отображаться как одна запись в списке покупок. Мне нужно удержать фактические объекты, чтобы ссылаться на рецепт, из которого они были сделаны, дату, когда они были добавлены, и так далее ...

Поскольку я начинаю планировать схему для основных данных, я не уверен о том, как перейти к преобразованию класса HybridItem в объект NSManagedObject. Варианты Я рассмотрел:

  • Сделать HybridItem атрибут itemsтрансформируемые атрибут, но от того, что я прочитал это хранится в виде «плоского» сгустка данных - если я изменить мой Item объект в позже построить и нажмите обновления для моих пользователей, их хранят HybridItem будут вызывать проблемы, когда они делают их первую выборку после обновления

  • сделать HybridItem объект а переходного объектом и поиск комбинируемого Item объектов при каждом запуске приложения. Недостатком является то, это заставит пользователя ждать объединение Item объектов

  • Держите HybridItem как обычный класс и поиск соединяемых предметов при запуске, те же недостатки, что и выше

  • Держите HybridItem в виде регулярный класс и сериализовать отдельно, используя NSCoding. Это имеет некоторый код запах, чтобы быть уверенным

Как я изучаю вопросы, подобные моему, здравый смысл, чтобы взять атрибут, массивы, как это и делает его в отдельное юридическое лицо, а также использование отношения ассоциировать с объект. Но мой случай кажется другим, так как атрибут items фактически содержит массив объектов с одним и тем же родительским объектом (!).

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

Как мне закодировать мой HybridItem?

+0

Каковы общие свойства между 'RecipeItem' /' QuickAddItem' и 'HybridItem', которые заставляют вас давать им общий суперкласс? –

+0

Поскольку основная цель объектов состоит в том, чтобы отображать элементы списка продуктов, все они должны совместно использовать объект Unit (Eggs) Unit (например, lbs.), Объект Quantity (1/2), объект Aisle и источник (из рецепта или отдельного «ручного» добавления). При необходимости HybridItem показывал бы несколько источников. Они имеют почти все атрибуты. –

ответ

1

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

  • В вашем HybridItem подкласса, определяют отношение ко многим абстрактному Item класса
  • В Item классе, определить TO- одна связь называется parentItem классу HybridItem.
  • сделать эти 2 отношения обратными друг от друга
  • В HybridItem классе, определить временные атрибуты для любых значений, которые вы хотите, чтобы вычислить на основе количества каждого элемента в items массиве, например, количество данного блока ,
  • Как запустить свой алгоритм, чтобы собрать комбинируемые элементы в единый гибридный пункт, просто добавить эти элементы в items коллекции, связанной с HybridItem «с ко-многим

Обратите внимание, что этот подход не позволяет гибридный элемент включить другие гибридные элементы. Если вы этого не хотите, тогда вам нужно будет ввести новый подкласс Item и называть его чем-то вроде SingleItem. Затем сделайте RecipeItem и QuickAddItem (но не HybridItem) подклассы SingleItem. Затем вы создадите отношения, описанные выше, но вместо этого создадите их между SingleItem и HybridItem

Смежные вопросы