Objective c 像iTunes一样的播放列表结构的最佳实现?
我正在创建一个具有主细节界面的应用程序,类似于iTunes。它与iTunes的播放列表具有相同的数据层次结构(除了我不允许“播放列表”组保持简单)。换句话说,有一些普通的播放列表,其中只有用户手动添加的项目。有智能播放列表,显示与用户定义谓词匹配的所有项目。最后,有些“播放列表”用户根本无法编辑(我称之为Objective c 像iTunes一样的播放列表结构的最佳实现?,objective-c,cocoa,core-data,itunes,Objective C,Cocoa,Core Data,Itunes,我正在创建一个具有主细节界面的应用程序,类似于iTunes。它与iTunes的播放列表具有相同的数据层次结构(除了我不允许“播放列表”组保持简单)。换句话说,有一些普通的播放列表,其中只有用户手动添加的项目。有智能播放列表,显示与用户定义谓词匹配的所有项目。最后,有些“播放列表”用户根本无法编辑(我称之为DefaultFolders),但本质上只不过是花哨的智能播放列表,因为它们的谓词是显示所有内容。这些类似于iTunes中的“图书馆”和“电影”部分 在尝试重新创建此结构时,我提出了以下层次结构
DefaultFolders
),但本质上只不过是花哨的智能播放列表,因为它们的谓词是显示所有内容。这些类似于iTunes中的“图书馆”和“电影”部分
在尝试重新创建此结构时,我提出了以下层次结构(在核心数据中):(希望它是自解释的)
然而,随着我对这个应用程序的深入,这个结构变得有点麻烦。例如,我在AbstractFolder类上定义了一个名为-(NSSet*)items
,以便所有具体的文件夹类型(DefaultFolder
、SmartFolder
和folder
)都可以轻松检索其内容。这与文件夹实体与项
实体的关系一致。但是,我无法在抽象文件夹
中实现项
访问器,因为这将覆盖核心数据为文件夹
实体提供的生成的访问器。我曾考虑将其作为所有具体文件夹都将实现的协议的一部分,但这似乎违背了继承的目的
因此,我向大家展示了邮件列表的集体智慧。有没有更好的方法来模拟这种结构?你们中有人使用过类似结构的应用程序吗?您觉得什么有用?对不起,我没有太多地使用核心数据,但我不清楚为什么需要在AbstractFolder中实现items accessor?难道你不能把它放在标题的一个类别中,而不去实现它吗?这是抽象方法的标准方法 例如,在AbstractFolder.h中,您有:
@interface AbstractFolder (Abstract)
NSSet *items;
@end
然后你就不必费心在任何地方实现它了,这将迫使子类实现被使用。我提出了一个结构,我在这个答案中详细介绍了它:我在
AbstractFolder
中实现它,因为它是所有文件夹中最通用的。当我用代码处理一个文件夹时,我通常不需要知道它是什么类型的文件夹,所以我通常用AbstractFolder
s来处理它们;您希望子类实现它,但希望AbstractFolder声明它。我已经更新了我的答案,向你展示了你是如何做到这一点的。