如何在自动填充表格的部分中划分绑定数组?

时间:2009-01-27 19:46:52

标签: ios arrays cocoa binding interface-builder

我使用这个'教程'将我的名为'collection'的数组绑定到我界面上的NSTableview: http://www.cocoadev.com/index.pl?NSArrayController

界面构建器的东西并不那么难。当我尝试将数组中的数据实际显示到视图中时变得很困难。

在我的.h文件中:

@interface MyDocument : NSDocument
{
    NSMutableArray *collection;
    //other variables
}

并在我的.m文件中:

@implementation MyDocument
@synthesize collection;
     //quite some functions

     inside one function (that works):
     [collection addObject:fileName];

     //some other functions

     inside the init function:
     collection = [[NSMutableArray alloc] init];

现在我猜这个数组很好地绑定了接口和 tableview ,但是当然tableview及其列需要以特定的方式填充。现在添加项目后没有任何显示。使用集合addObject:fileName 功能

我应该创建一个子数组作为一个项目,填充字段?我应该如何将这些值/字段绑定到特定列。 (字段为'艺术家','标题'等)

我已经将Interface Builder中的每一列绑定到阵列控制器,其中控制器键' arrangeObjects '和模型键路径< / strong>'艺术家','标题'等。

请保持解释简单,因为我慢慢开始认为我永远不会得到这个数组控制器的东西...... Objective-C看起来并不那么难,但它需要的绑定是我不做的事情得到。 Apple的例子不足以让新手

2 个答案:

答案 0 :(得分:2)

通常,为了填充数据,你会为每一行使用一个字典(键是keyPath,并对数据对象),甚至更好,创建一个表来表示数据并为每一行创建一个新实例。绑定起初可能有点棘手(如果您是Cocoa的新手,请先熟悉数据源方法),但请查看this tutorialexamples here。两者都包含您可以下载的样本,并准确检查在Interface Builder中如何设置绑定。

答案 1 :(得分:1)

只是改变数组并不能告诉数组有什么变化。您需要发送变异的KVO通知。

执行此操作的正确方法是为属性实现访问器方法,然后调用自己的访问器。在这种情况下,您需要实现insertObjectInCollection:atIndex:并在实现[self insertObjectIntoCollection:fileName atIndex:[self countOfCollection]之后将数组的长度作为索引(countOfCollection)传递。

当你实现访问器时,当一个对象绑定到属性时,Cocoa会将访问器包装在KVO魔法中,它会发送相应的变异通知。