我正在创建一个具有主 - 详细界面的应用,类似于iTunes。它与iTunes的播放列表具有相同的数据层次结构(除了我不允许“播放列表”组保持简单)。换句话说,存在普通播放列表,其中他们的唯一项目是由用户手动添加的。有智能播放列表,显示与用户定义的谓词匹配的所有项目。最后,有一些“播放列表”根本不可由用户编辑(我称之为DefaultFolders
),但实质上只不过是花哨的智能播放列表,因为他们的谓词是为了展示一切。这些就像iTunes中的“图书馆”和“电影”部分。
在我尝试重新创建此结构时,我想出了以下层次结构(在核心数据中):http://gallery.me.com/davedelong#100084/Screen%20shot%202009-11-07%20at%207.17.53%20PM&bgcolor=black(希望它是不言自明的)
然而,随着我进一步深入这个应用程序,这个结构变得有点麻烦。例如,我在名为-(NSSet *)items
的AbstractFolder类上定义了一个访问器,因此所有具体文件夹类型(DefaultFolder
,SmartFolder
和Folder
)都可以轻松检索其内容。这与Folder实体与Item
实体的关系一致。但是,我无法在items
中实现AbstractFolder
访问者,因为这将覆盖由Folder
实体的Core Data提供的生成访问器。我已经考虑过让它成为所有具体文件夹实现的协议的一部分,但这似乎打败了继承的目的。
所以我打开了邮件列表的集体智慧。有没有更好的方法来模拟这种结构?你们有没有在类似结构的应用程序上工作过?你觉得有什么帮助?
答案 0 :(得分:0)
很抱歉,我没有那么多使用Core Data,但我不清楚为什么你需要在AbstractFolder中实现项目访问器?难道你不能只把它放在标题中的一个类别中而不用费心去实现吗?这是抽象方法的标准方法。
例如,在AbstractFolder.h中,你有:
@interface AbstractFolder (Abstract)
NSSet *items;
@end
然后你无需在任何地方实现它 - 这将强制使用子类实现。
答案 1 :(得分:0)
我想出了一个结构,我在这个答案中详细说明:https://stackoverflow.com/questions/1812311#1812924