iPhone - 核心数据模型设计问题

时间:2011-05-06 15:44:53

标签: iphone ios core-data

我正在审核斯坦福大学的iTunesU iPhone开发课程,并且正在尝试使用核心数据。

本质上,应用程序有两个利用Core Data的选项卡: 1)收藏照片 - 这是用户选择“喜欢”照片的位置列表(来自Flickr)。 (如果在给定位置没有“收藏”照片,则会从此列表中删除)。 2)最近的照片 - 这是用户最近查看的照片列表。

我最初的想法是使用两个实体:照片和位置,其中Photo将具有“whereTaken”关系,这将是一个位置,而Location将具有反向关系“photos”以包含来自该位置的所有Photo对象

然而,对于这个模型,我对如何跟踪给定位置是否有任何“收藏”照片感到困惑。该作业建议在“位置”实体中保留一个属性,以指定该位置是否有“收藏”的照片。

所以 - 这是我的问题:

  1. 创建会更好吗? 单独的实体 “FavoritePhoto”和“RecentPhoto” 而不只是“照片”?
  2. 如果没有,是否建议(或可能) 保留照片的子集(仅限于 相反的“受欢迎的” 关系)位置?
  3. 或者,我是否需要迭代NSSet 每次我删除一个照片对象 “收藏”照片,看是否有 是任何其他“收藏”的照片 剩下?或者,也许保持计数 最喜欢的照片作为属性 位置?
  4. 也许,我认为这完全错了 - 无论哪种方式,我都会感谢任何关于在这种情况下设计核心数据模型的建议,一般或具体的。

    非常感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:2)

你应该读一下NSPredicate。您可以将此附加到获取请求以过滤您要检索的照片。创建两个不同的Photo实体很可能是一个错误。您可能希望向Photo实体添加BOOL属性“isFavorite”。然后,在获取照片时,您会使用以下内容:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFavorite == %@", [NSNumber numberWithBool:YES]];

您还可以制作稍微复杂的谓词来过滤收藏状态和位置。

NSPredicate Programming Guide

答案 1 :(得分:0)

您可以在“位置”实体中创建一个获取的属性,并让它仅使用相应的谓词获取“收藏的”照片。

希望有所帮助。