Помощь в реализации ... Подкласс NSManagedObject? - PullRequest
0 голосов
/ 18 июня 2010

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

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

Я хотел бы иметь возможность повторно использовать группу представлений для отображения продуктов, что означает, что объект хранилища и загруженный объект должны быть одного типа.

Теперь, как бы я поступило лучшей реализации объектов?Можно ли создать такой класс:

FavoriteProduct: NSManageObject // реализация

, а затем подкласс

Product: FavoriteProduct // реализация

?

Класс CD просто не дает мне всего.Как лучше всего объединить эти два класса объектов, чтобы у меня было так мало работы по реализации различных представлений для каждого объекта?По сути, я просто хочу иметь возможность вызывать те же методы и т. Д. Для объектов Product, что и для объектов FavoriteProduct, и повторно использовать представления для обоих видов.Между ними есть только небольшая разница (один, конечно, хранится в избранном и имеет некоторые дополнительные значения, такие как заметки, теги, а у продукта нет).

Заранее спасибо

1 Ответ

0 голосов
/ 18 июня 2010

У меня был тот же вопрос некоторое время назад.Быстрый ответ: вы не можете создать экземпляр подкласса NSManagedObject без контекста, поэтому использование NSManagedObject в качестве суперкласса для чего-то, что не будет сохранено (так как он просто просматривается из сети), вероятно, не очень хорошая идея.

Итак, для вашего случая:

  • FavoriteProduct должен быть подклассом NSManagedObject
  • Следовательно, Product (суперкласс FavoriteProduct) также должен быть подклассом контекста NSManagedObject
  • Но тогда он должен быть создан с контекстом, а не с хорошим

В качестве обходного пути вы можете создать «поддельный» / временный контекст для объектов типа Product, но не FavoriteProduct, и выполнитьиерархия, как вы описали (что мне кажется немного хакерской)

Еще одно возможное решение - это иметь такую ​​иерархию:

  • Продукт: NSObject (или любой другой)
  • FavoriteProduct: Product
  • StoredProduct: NSManagedObject

В этом случае реализуйте все свои методы в Product / FavoriteProduct, как обычно, и имеет привязки от FavoriteProduct к StoredProduct (т.е.у вас может быть свойство «сохраненный продукт» в вашем FavoriteProduct, которое будет использоваться для обновления CoreData при каждом изменении некоторых свойств в FavoriteProduct)

Мне было бы интересно посмотреть, что другие делают в подобных ситуациях

...