1

我正在创建一个具有主从界面的应用程序,类似于 iTunes。它与 iTunes 的播放列表具有相同的数据层次结构(除了我不允许“播放列表”组保持简单)。换句话说,有正常的播放列表,其中唯一的项目是由用户手动添加的。有智能播放列表,显示与用户定义的谓词匹配的所有项目。最后,有一些用户根本无法编辑的“播放列表”(我称之为这些DefaultFolders),但本质上只不过是花哨的智能播放列表,因为它们的谓词是显示所有内容。这些就像 iTunes 中的“图书馆”和“电影”部分。

在我尝试重新创建此结构时,我提出了以下层次结构(在核心数据中): http: //gallery.me.com/davedelong#100084/Screen%20shot%202009-11-07%20at%207.17 .53%20PM&bgcolor=black(希望它是不言自明的)

然而,随着我对这个应用程序的深入了解,这种结构变得有点麻烦。例如,我在 AbstractFolder 类上定义了一个名为 的访问器-(NSSet *)items,以便所有具体的文件夹类型(DefaultFolderSmartFolderFolder)都可以轻松地检索它们的内容。这与文件夹实体与Item实体的关系一致。但是,我无法在 中实现items访问器AbstractFolder,因为这会覆盖 Core Data 为Folder实体提供的生成的访问器。我曾考虑将其作为所有具体文件夹都将实现的协议的一部分,但这似乎违背了继承的目的。

所以我向邮件列表的集体智慧敞开心扉。有没有更好的方法可以为这种结构建模?你们有没有人开发过具有类似结构的应用程序?你觉得什么有帮助?

4

2 回答 2

0

抱歉,我没有太多使用 Core Data,但我不清楚为什么需要在 AbstractFolder 中实现项目访问器?你不能把它放在标题中的一个类别中而不费心去实现它吗?这是抽象方法的标准方法。

例如,在 AbstractFolder.h 中,您将拥有:

@interface AbstractFolder (Abstract)

NSSet *items;

@end

然后你不必费心在任何地方实现它——这将强制使用子类实现。

于 2009-11-08T08:08:27.590 回答
0

我想出了一个结构,我在这个答案中详细说明:https ://stackoverflow.com/questions/1812311#1812924

于 2009-11-28T16:23:53.370 回答