类似iTunes的播放列表结构的最佳实现?

时间:2009-11-08 04:56:37

标签: objective-c cocoa core-data itunes

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

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

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

所以我打开了邮件列表的集体智慧。有没有更好的方法来模拟这种结构?你们有没有在类似结构的应用程序上工作过?你觉得有什么帮助?

2 个答案:

答案 0 :(得分:0)

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

例如,在AbstractFolder.h中,你有:

@interface AbstractFolder (Abstract)

NSSet *items;

@end

然后你无需在任何地方实现它 - 这将强制使用子类实现。

答案 1 :(得分:0)

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