2009-11-08 72 views
1

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

在我试图重现这个结构,我想出了以下层次结构(核心数据):http://gallery.me.com/davedelong#100084/Screen%20shot%202009-11-07%20at%207.17.53%20PM&bgcolor=black(希望这是不言自明)

但是,因为我已经得到了进一步进入这个应用程序,这种结构已变得有点麻烦。例如,我在AbstractFolder类中定义了一个名为-(NSSet *)items的访问器,以便所有具体文件夹类型(DefaultFolder,SmartFolderFolder)都可以轻松检索其内容。这与Folder实体与Item实体之间的关系相吻合。但是,我无法在AbstractFolder中实现items访问器,因为这会覆盖由Core Data为Folder实体提供的生成访问器。我曾考虑过将它作为所有具体文件夹将实现的协议的一部分,但这似乎打败了继承的目的。

所以我打开这个邮件列表的集体智慧。有没有更好的方法可以模拟这种结构?你们有没有人从事类似结构的应用程序?你觉得有帮助的是什么?

回答

0

对不起,我还没有用过很多Core Data,但是我不清楚为什么你需要在AbstractFolder中实现物品存取器?难道你不能把它放在标题中的一个类别中,而不用去执行它?这是抽象方法的标准方法。

例如,在AbstractFolder.h,你必须:

@interface AbstractFolder (Abstract) 

NSSet *items; 

@end 

,然后你也懒得去实现它的任何地方,这将迫使子类实现使用。

+0

我实现它在'AbstractFolder',因为它是最通用的所有文件夹中。当我处理代码中的文件夹时,我通常不需要知道它是什么类型的文件夹,所以我通常将它们作为'AbstractFolder'处理。 – 2009-11-08 21:05:37

+0

对,但在我看来,你不能在AbstractFolder中有一个通用的实现;您希望子类实现它,但您希望AbstractFolder声明它。我已经更新了我的答案,向你展示了你是如何做到的。 – 2009-11-08 21:33:54