【问题标题】:Best implementation for iTunes-like playlist structure?类 iTunes 播放列表结构的最佳实现?
【发布时间】:2009-11-08 04:56:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: objective-c cocoa core-data itunes


    【解决方案1】:

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

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

    @interface AbstractFolder (Abstract)
    
    NSSet *items;
    
    @end
    

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

    【讨论】:

    • 我在AbstractFolder 中实现它,因为它是所有文件夹中最通用的。当我在代码中处理一个文件夹时,我通常不需要知道它是什么类型的文件夹,所以我通常将它们处理为AbstractFolders。
    • 对,但在我看来你不能在 AbstractFolder 中有一个通用的实现;您希望子类实现它,但您希望 AbstractFolder 声明它。我已经更新了我的答案,向你展示你是如何做到的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 2010-10-22
      • 2011-03-09
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多