2

我在将 Cocoa 项目从手动同步的接口模型转换为绑定模型时遇到了麻烦,因此我不必担心接口胶水代码。

我遵循了 CocoaDevCentral Cocoa Bindings 教程,以确保我已经涵盖了所有基础,但事情并没有正常工作。我有一个主从界面,但我什至无法让界面的主部分正常工作。主列中没有显示任何数据,即使我已经设置了类似于教程中显示的绑定模型。我已经确保我所有的控制器和对象都有-(id)key并且-(void)setKey:(id)key方法,以便它们与绑定兼容,我在我的 nib 中创建了一个 ControllerAlias 对象,将其连接到我的控制器,创建了一个 NSArrayController 绑定到 ControllerAlias 连接到的类中的 NSMutableArrays 之一,确保设置数组中包含的对象类型,然后我将表列绑定到 NSArrayController。

我在控制台中没有收到任何错误,设置NSBindingDebugLogLevel为 1 也不会产生任何错误,这将帮助我找出问题所在。

为了确保一切正常,我唯一能想到的另一件事是检查连接到 NSArrayController 的 NSMutableArray 中是否确实包含某些内容,并且确实存在。

有什么建议么?我应该检查 Cocoa 绑定还有哪些其他典型的陷阱?

4

3 回答 3

1

您是否在 key: 方法中设置了断点来确定它是否被调用?如果不是,则表明没有为表列中的绑定正确设置某些内容(因为您已验证您的数组中确实包含项目)。

我认为您不再需要创建对象控制器(该教程有点过时了)。只需在您的 NIB 中创建一个对象,并将其类设置为您的控制器类。您可以直接通过它而不是 ObjectController 来设置绑定。

要设置绑定,我执行以下操作:

  1. 在 NIB 中创建我的控制器的实例。
  2. 创建一个 NSArrayController,将它绑定到我的控制器中的一个数组。
  3. 对于表中的每一列,将值绑定到数组控制器中对象的成员。

这应该是您需要做的所有事情 - 我认为自从绑定在几个版本之前首次引入以来,他们已经清理了很多。

于 2008-11-09T04:33:29.343 回答
0

我在我的笔尖中创建了一个 ControllerAlias 对象,

什么是“控制器别名”?这是模型、控制器还是视图?

将它连接到我的控制器,

你是什​​么意思?

创建了一个 NSArrayController 绑定到 ControllerAlias 连接到的类中的 NSMutableArrays 之一,

类没有NSMutableArrays。

你绑定了数组控制器的什么属性?

你把它绑定到什么对象上?

您将它绑定到该对象的哪个关键路径?

…然后我将一个表列绑定到 NSArrayController。

你绑定了表格列的什么属性?

您将它绑定到数组控制器的哪个属性(键路径)?

于 2008-11-09T04:48:18.207 回答
0

所以在我的原始代码中,我在 awakeFromNib 中而不是在 init 中修改了数组(NSArrayController 所代表的),所以这些更改没有反映在界面中,因为我没有通过键值观察来修改数组方法。

我将代码从

theArray = [[NSMutableArray alloc] init];
[theArray addObject:newThing];

至:

theArray = [[NSMutableArray alloc] init];
NSMutableArray *bindingsCompliantArray = [self mutableArrayValueForKey:@"things"];
[bindingsCompliantArray addObject:newThing];

我认为另一种解决方案是在 -(id)init 方法而不是 -(void)awakeFromNib 方法中进行加载,但这需要更大的重构,所以我没有这样做。

我通过添加一个按钮来通过 NSArrayController 在数组列表中创建一个新事物来解决这个问题,当我单击该按钮时,一个新事物被添加到数组中,并且我现有的数组也神奇地出现了。

于 2008-11-09T06:04:34.870 回答