У меня есть приложение для списка продуктов, и я планирую использовать 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
?
Каковы общие свойства между 'RecipeItem' /' QuickAddItem' и 'HybridItem', которые заставляют вас давать им общий суперкласс? –
Поскольку основная цель объектов состоит в том, чтобы отображать элементы списка продуктов, все они должны совместно использовать объект Unit (Eggs) Unit (например, lbs.), Объект Quantity (1/2), объект Aisle и источник (из рецепта или отдельного «ручного» добавления). При необходимости HybridItem показывал бы несколько источников. Они имеют почти все атрибуты. –