0

我正在开发一个应用程序,其中有一些产品可以在列表中下载。下载的产品显示在一个表格中,每个都将显示一个包含更多信息的详细视图。

这些相同的产品可以保存为收藏夹,为此我使用的是 Core Data。

我希望能够重新使用一堆视图来显示产品,这意味着存储对象和下载对象必须是同一种。

现在,我将如何最好地实现对象?我可以开这样的课吗:

FavoriteProduct : NSManageObject // 实现

然后子类

Product : FavoriteProduct // 实现

?

CD课程并没有给我一切。合并这两个对象类的最佳方法是什么,这样我在为每个对象实现不同视图方面的工作就很少了?基本上,我只是希望能够在 Product 对象上调用相同的方法等,就像对那些是 FavoriteProduct 对象一样,并为这两种对象重用视图。两者之间只有一点区别(一个当然存储为收藏夹,并具有一些额外的值,例如注释、标签,而 Product 则没有)。

提前致谢

4

1 回答 1

0

不久前我有同样的问题。快速回答:您不能在没有上下文的情况下实例化 NSManagedObject 子类,因此将 NSManagedObject 用作​​不会保存的东西的超类(因为它只是从网上查看的),可能不是一个好主意。

所以对于你的情况:

  • FavoriteProduct 必须是 NSManagedObject 的子类
  • 因此 Product(FavoriteProduct 的超类)也必须是 NSManagedObject 上下文的子类
  • 但是必须在上下文中创建它,这不好

作为一种解决方法,您可以为 Product 类型的对象设置“假”/临时上下文,但不是 FavoriteProduct 并按照您描述的方式进行层次结构(这对我来说似乎有点 hacky)

另一种可能的解决方案是具有此层次结构:

  • 产品:NSObject(或其他)
  • 最喜欢的产品 : 产品
  • 存储产品:NSManagedObject

在这种情况下,像往常一样在 Product/FavoriteProduct 上实现您的所有方法,并具有从 FavoriteProduct 到 StoredProduct 的绑定(即,您可以在您的 FavoriteProduct 上拥有一个属性“storedProduct”,该属性将用于在 FavoriteProduct 上的某些属性时更新 CoreData被改变了)

我很想看看其他人在这种情况下会做什么

于 2010-06-18T04:30:06.977 回答