Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 像iTunes一样的播放列表结构的最佳实现?_Objective C_Cocoa_Core Data_Itunes - Fatal编程技术网

Objective c 像iTunes一样的播放列表结构的最佳实现?

Objective c 像iTunes一样的播放列表结构的最佳实现?,objective-c,cocoa,core-data,itunes,Objective C,Cocoa,Core Data,Itunes,我正在创建一个具有主细节界面的应用程序,类似于iTunes。它与iTunes的播放列表具有相同的数据层次结构(除了我不允许“播放列表”组保持简单)。换句话说,有一些普通的播放列表,其中只有用户手动添加的项目。有智能播放列表,显示与用户定义谓词匹配的所有项目。最后,有些“播放列表”用户根本无法编辑(我称之为DefaultFolders),但本质上只不过是花哨的智能播放列表,因为它们的谓词是显示所有内容。这些类似于iTunes中的“图书馆”和“电影”部分 在尝试重新创建此结构时,我提出了以下层次结构

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

在尝试重新创建此结构时,我提出了以下层次结构(在核心数据中):(希望它是自解释的)

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


因此,我向大家展示了邮件列表的集体智慧。有没有更好的方法来模拟这种结构?你们中有人使用过类似结构的应用程序吗?您觉得什么有用?

对不起,我没有太多地使用核心数据,但我不清楚为什么需要在AbstractFolder中实现items accessor?难道你不能把它放在标题的一个类别中,而不去实现它吗?这是抽象方法的标准方法

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

@interface AbstractFolder (Abstract)

NSSet *items;

@end

然后你就不必费心在任何地方实现它了,这将迫使子类实现被使用。

我提出了一个结构,我在这个答案中详细介绍了它:

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