核心数据 - 保存现有的托管对象并在另一个视图中显示它

时间:2010-07-19 16:35:15

标签: iphone core-data

我正在开发一款具有预先填充数据的桌面下钻式iPhone应用程序。我使用Core Data和NSFetchedResultsController来填充表视图。在显示项目(托管对象)的表视图的最后一级中,我希望我的用户能够选择最终应该在另一个视图中显示的项目。其他视图将是一种最喜欢的列表(在选项卡视图中实现)。然后,用户可以选择删除或添加其他项目到收藏夹列表。

我的模型有三个实体,每个实体代表一个级别的表视图。更高级别的实体与较低级别实体具有多对多关系,而反向关系为一对一

如何使用现有的托管对象(表视图的最后一级中的对象)进行保存并将其显示在收藏夹列表视图中?我应该创建新实体并建立两者之间的关系吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以创建一个新实体并存储该关系。它不一定是唯一的方式 - 您可以在NSManagedObject之类的容器中存储指向NSMutableArray的指针 - 但是如果您想记住该列表对于以后(即在启动之间保存),最有意义的是也可以使用Core Data存储它。

答案 1 :(得分:0)

  

我的模型各有三个实体   表示一个级别的表格视图。

这是倒退的想法。您所拥有的是逻辑上存在于层次结构中的三个实体,并且视图的层次结构反映了该逻辑结构。存在显示数据的视图,不存在显示视图的数据。这是一个需要掌握的重要概念,如果您不这样做,您的应用程序设计将始终过于复杂,脆弱且难以扩展和维护。数据模型始终排在第一位,数据模型本身内的逻辑关系以及用户与该数据的交互最终控制了应用程序的UI结构。

这是一个容易陷入的陷阱因为教学材料总是首先从界面开始。但是,在真实的应用程序设计中,首先从数据模型开始,然后继续前进到界面。

在这种情况下,如果您想存储某个实体的收藏夹,您有两个选择。如果作为收藏夹的实体是数据和用户之间的核心关系的一部分,并且您只有一组收藏夹,那么您可以合法地向实体添加布尔“isFavorite”属性,然后只获取“isFavorite”中的实体== YES“;如果您有多个收藏夹列表,那么最好的方法是创建一个FavoritesList实体,然后将每个收藏夹实体与它应该列出的对象相关联。

如果收藏夹是用户与数据交互的次要和外围部分,则可以将objectID存储在用户默认值中。