1

我正在构建一个简单的 Core Data 应用程序来尝试理解 Core Data。它有两个实体:一个气象站和一个给定站的观测集合。

我为此创建了初始界面,方法是在我的窗口上放置一个选项卡视图,选择第一个选项卡,然后将气象站实体拖到该视图上;然后选择第二个选项卡并将观察实体拖到第二个选项卡上。

然后我自己创建了第三个标签,并在顶部添加了一个弹出窗口。此弹出窗口绑定到 StationArrayController,因此它填充了我添加的所有气象站。这很好用。

然后我添加了一个表格视图来显示与所选站关联的观测值。这也很好用。我使用一种方法来实现这一点,该方法创建一个谓词,该谓词搜索其站点与所选站点匹配的所有观测值,并将谓词附加到与第三个选项卡上的表视图关联的 ObservationArrayController。(我不知道如何在 IB 中做到这一点,所以我以编程方式完成)。

错误是这样的:如果我加载以前保存的包含气象站和观测的文件,当我转到第三个选项卡时,即使选择了一个站(,它出现在弹出窗口中),所有的观测出现在表格视图中,而不仅仅是与该站关联的那些。

发生这种情况是因为我没有调用将谓词附加到观察阵列控制器的方法,直到我实际使用弹出窗口手动更改站。

所以我的问题和问题是这样的(抱歉,花了这么长时间才达到这一点!):如何检测选项卡视图何时加载,以便我可以强制附加谓词的方法运行,从而获得初始列表与所选站匹配的观测值?

我尝试创建一个自定义 View 类并将其子类化为第三个选项卡视图并将此代码放在 awakeFromNib 方法中,但这在过程中为时过早(在加载过程中此时“选定站”为 -1)。

任何帮助将非常感激。谢谢你!!

伊丽莎白

4

1 回答 1

1

啊,我刚刚回答了我自己的问题!

我将 tabview 的委托设置为 MyDocument,并在那里实现了 tabView:didSelectTabViewItem:。我在 MyDocument 中创建了一个指向第三个选项卡视图的 IBOutlet,并在此方法中检查是否选择了第三个选项卡,如果是,则调用该方法将谓词附加到 ObservationArrayController。效果很好!

于 2009-11-20T23:09:25.667 回答