Core Data应用程序中的多个视图和源列表

时间:2009-08-01 06:41:02

标签: objective-c cocoa core-data

我正在研究我的第一个主要的Cocoa应用程序,用于本科研究项目。

该应用程序是基于文档的,并使用Core Data。其中一个实体是抽象实体,Page. Page是几种类型页面的父类:即PageWithHeaderAndFooter, PageWithTwoColumns, BasicPage等。Page具有所有页面共有的属性,例如标题和作者。每种特定类型的页面都有一定数量的布局块(PageWithHeaderAndFooter有三个:页眉,页脚,正文。BasicPage有一个:body。等等。此外,所有Page子类定义特定于布局的某些方法的实现。

另一个相关实体是Style,它定义了Page的视觉外观。 (将Page视为HTML,将Style视为CSS。)

我希望我的应用程序有一个类似iTunes / Mail的源列表。 (一个是Pages,另一个是Styles。)我非常清楚如何编写分段源列表(this was a great help)。

然而,经过几个小时的轰炸和毫无结果的谷歌搜索,这是我无法弄清楚的:

源列表中列出的页面和样式,当您选择其中一个时,该对象的所有相关字段都显示在右侧(主要是NSTextViews,弹出菜单等)。

我把它解决了,并在Interface Builder中完成了所有绑定。

问题是,如果我的源列表包含不同类型的页面,如何根据所选页面的类型在右侧显示不同的视图?例如,如果选择了BasicPage,我只需要您在上面看到的内容:常规页面内容和一个与body的{​​{1}}字段对应的NSTextView。但是,如果我选择一个BasicPage,我想显示一般页面内容和三个NSTextViews(一个用于页眉,正文和页脚)。如果我选​​择了PageWithHeaderAndFooter,我想显示各种流行菜单,颜色井等。

至少对于页面,我们只讨论一个或多个NSTextView,每个NSTextView对应于相应实体的String属性。

你会怎么做?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我有一个项目列表,它们是3种类型之一,但都非常相似。

我在推送之前将Entity设置到视图控制器中,然后在pushee的viewDidLoad中检查我所拥有的entity的类型,并通过指定不同的方式来布局信息nibs加载。

if([[entity entityType] isEqualToString:@"TypeA"]) {
    [[NSBundle mainBundle] loadNibNamed:@"TypeAView" owner:self options:nil];
} else if(...) { .....

对我来说这很好用。