我使用这个'教程'将我的名为'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的例子不足以让新手
答案 0 :(得分:2)
通常,为了填充数据,你会为每一行使用一个字典(键是keyPath,并对数据对象),甚至更好,创建一个表来表示数据并为每一行创建一个新实例。绑定起初可能有点棘手(如果您是Cocoa的新手,请先熟悉数据源方法),但请查看this tutorial和examples here。两者都包含您可以下载的样本,并准确检查在Interface Builder中如何设置绑定。
答案 1 :(得分:1)
只是改变数组并不能告诉数组有什么变化。您需要发送变异的KVO通知。
执行此操作的正确方法是为属性实现访问器方法,然后调用自己的访问器。在这种情况下,您需要实现insertObjectInCollection:atIndex:
并在实现[self insertObjectIntoCollection:fileName atIndex:[self countOfCollection]
之后将数组的长度作为索引(countOfCollection
)传递。
当你实现访问器时,当一个对象绑定到属性时,Cocoa会将访问器包装在KVO魔法中,它会发送相应的变异通知。