可可绑定问题;绑定表列不显示任何数据,控制台中没有错误

时间:2008-11-09 04:16:49

标签: cocoa cocoa-bindings nsarraycontroller key-value-coding

我无法将我的Cocoa项目从手动同步的界面模型转换为绑定模型,因此我不必担心界面粘合代码。

我跟着CocoaDevCentral Cocoa Bindings tutorial确保我已经覆盖了所有基础,但是事情没有正常工作。我有一个主 - 细节界面,但我甚至无法让界面的主部分正常工作。尽管我已经设置了类似于教程中显示的绑定模型,但主列中没有数据显示出来。我确保我的所有控制器和对象都有-(id)key-(void)setKey:(id)key方法,以便它们符合绑定,我在我的nib中创建了一个ControllerAlias对象,将它连接到我的控制器,创建一个NSArrayController绑定到ControllerAlias连接的类中的一个NSMutableArrays,确保设置数组中包含的对象的类型,然后我将表列绑定到NSArrayController。

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

我能想到的另一件事是确保事情正常工作是检查连接到NSArrayController的NSMutableArray实际上是否包含某些东西,并且它确实存在。

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

3 个答案:

答案 0 :(得分:1)

您是否在密钥中设置了断点:确定是否被调用的方法?如果不是,则表示没有为表列中的绑定设置正确的内容(因为您已经验证了您的数组中确实存在项目)。

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

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

  1. 在NIB中创建我的控制器实例。
  2. 创建一个NSArrayController,将其绑定到我的控制器中的数组。
  3. 对于表中的每一列,将值绑定到数组控制器中对象的成员。
  4. 这应该是你需要做的所有事情 - 我认为他们已经清理了很多,因为绑定是在几个版本之前首次推出的。

答案 1 :(得分:0)

  

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

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

  

将它连接到我的控制器,

你是什么意思?

  

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

课程没有NSMutableArray s。

你绑定了数组控制器的哪些属性?

你把它绑在哪个对象上?

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

  

...然后我将表列绑定到NSArrayController。

你绑定了表列的哪些属性?

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

答案 2 :(得分:0)

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

我从

更改了代码
theArray = [[NSMutableArray alloc] init];
[theArray addObject:newThing];

为:

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

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

我通过添加一个按钮来通过NSArrayController在数组列表中创建一个新东西来解决这个问题,当我点击按钮时,一个新的东西被添加到数组中,我现有的数组也神奇地出现了。 / p>