0

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

interfacebuilder 的东西并不难。当我尝试将数组中的数据实际显示到视图中时,这变得很困难。

在我的 .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 中的每一列绑定到Array Controller,其中包含Controller 键arrangeObjects ”和模型键路径artist ”、“ title ”等。

请保持解释简单,因为我慢慢开始认为我永远不会得到这个数组控制器的东西......Objective-C 似乎并不难,但它需要的绑定是我没有得到的。苹果的例子对新手来说是不够的

4

2 回答 2

2

通常,要填充数据,您会为每一行使用一个字典(键是 keyPath,对象是数据),或者更好的是,创建一个类来表示数据并为每一行创建一个新实例。绑定起初可能有点棘手(如果您是 Cocoa 新手,请先习惯数据源方法),但请查看本教程此处的示例。两者都包含示例,您可以下载并检查如何在 Interface Builder 中设置绑定。

于 2009-01-27T21:19:51.817 回答
1

仅仅改变数组并不能说明数组已经改变。您需要为突变发送 KVO 通知。

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

当您实现访问器时,当一个对象绑定到该属性时,Cocoa 会将访问器包装在 KVO 魔术中,该魔术将发送适当的突变通知。

于 2009-01-27T23:35:08.470 回答