代码之家  ›  专栏  ›  技术社区  ›  Dave DeLong

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

  •  1
  • Dave DeLong  · 技术社区  · 15 年前

    我正在创建一个具有主细节界面的应用程序,类似于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 ,以便所有具体的文件夹类型( DefaultFolder , SmartFolder Folder )可以轻松检索内容。这与文件夹实体与 Item 实体。但是,我无法实现 items 访问器 AbstractFolder ,因为这将重写核心数据为 文件夹 实体。我已经考虑过将其作为所有具体文件夹都要实现的协议的一部分,但这似乎会破坏继承的目的。

    所以我打开这张邮件列表的集体智慧。有没有更好的方法可以为这个结构建模?你们中有人使用过类似结构的应用程序吗?你觉得有什么帮助?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Chris Suter    15 年前

    抱歉,我没有那么多地使用核心数据,但我不清楚为什么需要在AbstractFolder中实现items访问器?_t您能把它放在头中的一个类别中而不费心去实现它吗?这是抽象方法的标准方法。

    例如,在abstractfolder.h中,您有:

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

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

        2
  •  0
  •   Community CDub    7 年前

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