如何编辑NSArrayController的数据(或使用其他东西)

时间:2011-05-29 17:42:26

标签: objective-c cocoa edit nsarraycontroller key-value-coding

我创建了一个nsarraycontroller来在我的nstableview上显示它的数据。这是有效的。但是我现在如何修改这些数据?

[arrayController addObject:[...]]

添加一个对象,我该如何取回它?

我试过了:

NSMutableArray *data = [arrayController mutableArrayValueForKey:@"column1"];]

然后我收到此错误

2011-05-29 19:25:50.125 TestApp[1665:903] [<NSArrayController 0x113808500> valueForUndefinedKey:]: this class is not key value coding-compliant for the key column1.

(我的arraycontroller中表示我视图中的行的对象属于一个类(名为FileEntry),由4个属性组成,我将这些作为键添加到我的nsarraycontroller中)

我认为kvc-compilant意味着每个属性都有一个getter和setter? (并不是属性有哪些?)。

如果我可以使用此功能,我测试了我的课程:

FileEntry *entry = [[FileEntry alloc] initWithUrl:@"test"];  //(this adds the string "test" to the property "fileurl")
NSLog(@"%@\n", [entry valueForKey:@"fileurl"]);

and it returns:
> 2011-05-29 19:31:54.760 TestApp[1718:903] test

它有效。那我的班级怎么可能不是kvc-compilant?

无论如何,我也尝试使用tableviews数据源,但不能让这两个函数起作用。那会比nsarraycontroller更有用吗?甚至可以修改nsarraycontroller的数据?

1 个答案:

答案 0 :(得分:2)

通常你需要一个用于处理NSArrayController的contend数组,所以你可以简单地使用这个数组并使用NSMutableArray方法。例如,你在MyController.h中有一个带有setter和getter方法的数组声明,你只需要将数组控制器的contend数组绑定到它。然后你可以使用两个按钮来添加和删除数组控制器的方法来添加一些东西。现在,您必须将列的值绑定到例如数组控制器托管对象的FileEntry.fileurl,现在您应该能够向表视图添加内容。您还可以在表格视图中编辑名称。如果你想在你的程序中从某个地方获取一些东西,你可以像这样使用表视图的插座:

NSInteger row = [myTableViewOutlet selectedRow];
FileEntry* myEntry = [myArray objectAtIndex:row];