我正在创建一个具有类似于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
,SmartFolder
和Folder
)都可以轻松检索其内容。这与Folder实体与Item
实体之间的关系相吻合。但是,我无法在AbstractFolder
中实现items
访问器,因为这会覆盖由Core Data为Folder
实体提供的生成访问器。我曾考虑过将它作为所有具体文件夹将实现的协议的一部分,但这似乎打败了继承的目的。
所以我打开这个邮件列表的集体智慧。有没有更好的方法可以模拟这种结构?你们有没有人从事类似结构的应用程序?你觉得有帮助的是什么?
我实现它在'AbstractFolder',因为它是最通用的所有文件夹中。当我处理代码中的文件夹时,我通常不需要知道它是什么类型的文件夹,所以我通常将它们作为'AbstractFolder'处理。 – 2009-11-08 21:05:37
对,但在我看来,你不能在AbstractFolder中有一个通用的实现;您希望子类实现它,但您希望AbstractFolder声明它。我已经更新了我的答案,向你展示了你是如何做到的。 – 2009-11-08 21:33:54