3

我的应用程序中有一个检查器窗格,其中包含一堆控件。这些控件通过NSArrayController. 根据选择的对象类型,我将显示一组不同的检查器(就像 IB 的工作方式一样)。检查器控制器观察阵列控制器的selection,以便在选择更改时加载所需的检查器集。

问题是旧的检查员显然没有被删除。即使检查器控制器没有对它们进行强引用并且它们已从其超级视图中删除,它们仍然会留下并将绑定错误记录到控制台:

[<Circle 0x102107df0> valueForUndefinedKey:]: this class is not key value 
coding-compliant for the key width.

我的猜测是,NSArrayController由于绑定,它对控件有很强的引用。这可能吗?在从超级视图中删除控件之前,我是否必须手动删除绑定?如何正确实现这样的检查器窗格?


编辑:文档说

接收者和观察者都不会被保留。

所以我想在删除控件时应该自动删除绑定,不是吗?

4

1 回答 1

1

selection问题是在检查器控制器对变化的响应和各种检查器视图更新自己以响应相同的事情之间没有定义的顺序。因此,新数组控制器选择的“错误”检查器至少在短时间内仍然存在,并试图访问元素对象不存在的属性。

一种解决方法是不依赖于观察数组控制器的键值对selection来切换检查器集。相反,有一个协调控制器——无论哪个基于用户操作控制“选定对象”——在更改选择之前清除检查器集,并且在更改选择之前不要切换新的检查器集。

于 2013-08-13T01:50:02.837 回答