阵列控制器在按下“添加”按钮之前不更新表格视图

时间:2013-04-12 09:13:45

标签: xcode cocoa nsmutablearray nstableview nsarraycontroller

我是Cocoa和Objective-C的新手,所以我正在学习Lynda课程并学到很多东西。事实是,我遇到了一个我无法弄清楚的问题,即使我似乎也是这样做的......

基本上,我试图通过绑定到数组控制器来连接表视图,只是为了在我的代码中列出一个简单的NSMutableArray的内容。我把它全部搞定了,但不管我做了什么,当我运行程序时都没有显示任何内容。

这里变得奇怪了:在云雀上,我添加了一个“+”按钮并将其连接到阵列控制器的“添加”功能,当我运行应用程序并单击该按钮时,它不仅添加了一个新行,但它也显示了整个数组!显然,一切都被正确地连接起来,它只是没有显示信息。进一步的实验表明,无论是在原始代码中还是在应用程序运行期间,我都可以对数组进行任何更改,但只有在单击“+”按钮时才会在表视图中更新它们。

我觉得这可能是一个简单的解决方案,只需要一些需要检查的“连续”盒子或其他东西,但我不能为我的生活找到它...任何人都可以指出我需要做什么让我的TableView自动显示其内容?

(另外,我不知道这是否相关,但检查员中的“模型关键路径”字段都没有提供我输入的建议,他们在Lynda课程中这样做。该应用程序工作正常如果我手动输入所有内容,但它总是说“没有找到完成”。)

提前感谢您帮助n00b!

2 个答案:

答案 0 :(得分:1)

  

检查器中的“模型关键路径”字段中没有一个在我输入

时提供建议

据我了解,这可能是因为保存数据数组的NSMutableArraydogPound或类似数据,也不会声明为属性,只是实例变量。
声明属性@property NSMutableArray * dogPound;并将实例变量声明更改为_dogPound,我认为界面构建器应该为您提供自动完成。

答案 1 :(得分:0)

  

我是Cocoa和Objective-C的新手

我也是。

  

我把它全部搞定了,

在大约30分钟内,我可以使用像Dog这样的自定义类以及另一个名为AppController的类来设置一个实例变量:NSMutableArray * dogPound。 AppController类的init()方法创建数组并向数组添加一些Dog实例。我还将一个NSArrayController绑定到dogPound数组,并将NSTableView列绑定到NSArrayController。在构建和运行之后,NSTableView显示dogPound数组中每个Dog实例的信息。

我还尝试了一个更简单的版本,其中没有Dog类,AppController类中的数组只包含一些NSString对象。再次,我能够成功地将NSArrayController绑定到数组并将表的列绑定到NSArrayController,以便NSTableView显示数组中的所有NSString。

你需要发布你的确切代码,你需要写下你在IB中所做的每一步,这当然是一个巨大的痛苦,但这是任何人都能够帮助你的唯一方式。

  

这就是它变得奇怪的地方:在云雀上,我添加了一个“+”按钮并挂钩   它进入了Array Controller的“add”功能,当我运行时   应用程序并单击该按钮,它不仅添加了新行,而且还添加了新行   也展示了整个阵列!

当然。 NSArrayController中的add:方法向数组中添加一个新项,然后向NSTableView发出信号,指示它应该重新加载数据,即显示当前在数组中的所有内容。

  

我觉得这可能是一个简单的解决方案,只是一些“连续”   需要检查的方框或其他东西,

不,不是那样的。

  

检查员中没有“模型关键路径”字段提供   我输入的建议

缺乏自动完成选择是一个很大的暗示,你做错了什么 - 即使我发现我不能总是想出来,所以我只是继续打字。您是否记得在NSArrayController的Attributes Inspector(对象控制器部分)中开始绑定?在IB中,您是否通过将Object拖动到MainWindow.xib上来创建AppController类的实例,或者您调用包含NSMutableArray的类的任何实例?