2009-09-25 4 views
0

Я проектирую свой первый проект с использованием Core Data (для iPhone), и у меня есть некоторые проблемы, которые могут быть связаны с моим дизайнерским подходом.Основные данные: вопросы дизайна. Обертки объектов или нет?

Я делаю приложение, которое позволяет пользователю создать заказ (скажем, для ресторана). Я использую графический дизайнер для моделирования моего объекта персистентности (т. Е. OrdeMO). Я добавляю MO к ead каждого имени, чтобы указать его Управляемый объект. Я использую XCode для автоматического создания класса управляемого объекта.

Я создал несколько классов «DAO», которые позволяют вам искать или создавать новый объект в управляемом контексте.

Теперь к моей проблеме.

Я хочу создать объект OrderMO для хранения заказа, который пользователь создает, но я не хочу, чтобы он был частью контекста, пока пользователь не разместит его. Я попытался создать объект с помощью [OrderMO alloc], но объект, который я получаю, является «неполным», и когда я пытаюсь установить любой из его атрибутов, я получаю сообщение об ошибке.

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

Я рассмотрел различные варианты:

  1. Создание объекта в контексте и откат пользователя, если пользователь отказывается от заказа. Проблема в том, что пользователь мог бы сохранить другой объект контекста во время процесса (например, его префы), так что это не сработает. Есть ли способ создать объект «внутри отдельной транзакции»?

  2. Создайте объект-обертку, который будет хранить те же данные, что и MO, а затем создайте MO, когда пользователь разместит заказ. Недостатком этого является то, что я должен поддерживать новый класс.

  3. Создайте атрибут в MO, например «помещенный», и используйте для фильтрации моих поисков в контексте. Проблема с этим в том, что я в конечном итоге с «мусорными» объекты в домене (т.е. неразмещенных заказов) и мне придется сделать некоторые очистки время от времени ...

У меня есть какие-либо другой выбор?

Любое предложение приветствуется.

Спасибо (для чтения этого длинного поста!) Gonso

ответ

0

Вы должны создать объект OrderMO в контексте управляемого объекта, а затем delete, если пользователь решит не размещать заказ.
Если контекст сохраняется до удаления объекта, объект «мусор» будет удален из постоянного хранилища при следующем сохранении (если контекст не был сохранен, объект «мусор» никогда не будет сохранен в постоянном магазин).
Флаг, чтобы определить, был ли размещен заказ или нет, не должен жить в объекте OrderMO, как вы предлагаете в опции 3. Он может быть в контроллере представления, который отслеживает порядок (ы), которые редактируются. И, опять же, у вас не будет объектов «мусора», потому что они будут удалены.