我有一个NSMutableArray
(包含NSMutableDictionary
个实例)绑定到NSArrayController
(NSArrayController
又绑定到NSTableView
列)。
Cocoa最友好的方式是什么?以编程方式:
NSMutableDictionary
)添加到数组中?我一直以一种我不喜欢的方式做这件事 - 而且我确定这不是最好的解决办法(对于这么简单的东西来说代码太多了:在Cocoa中表示一个关于这个主题的错误观点: - ))。
我的代码(实际上是一种矫枉过正):
添加到数组
NSMutableArray* oldParams = [paramsArray mutableCopy];
[oldParams addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Parameter",@"Parameter",@"",@"Value", nil]];
[self setParamsArray:oldParams];
[paramsController setSelectionIndex:[paramsArray count]-1];
从数组中删除当前选定的对象
if ([paramsArray count]>0)
{
int s = [paramsController selectionIndex];
NSMutableArray* oldParams = [paramsArray mutableCopy];
[oldParams removeObjectAtIndex:s];
[self setParamsArray:oldParams];
if (s<=[paramsArray count]-1)
[paramsController setSelectionIndex:s];
else
[paramsController setSelectionIndex:[paramsArray count]-1];
}
那么,您对此有何看法?
答案 0 :(得分:2)
鉴于数组控制器绑定到某个对象上名为paramsArray的属性,最好的方法是在该对象的类上定义键值编码indexed accessors。然后,使用这些访问器以符合KVO的方式改变属性表示的to-many关系。
例如,实现-insertObject:inParamsArrayAtIndex:然后使用它来添加对象。如果您喜欢NSMutableArray&#39; s -addObject:方法的便利,您可以编写一个转发到-insertObject的-addObjectToParamArray方法:inParamsArrayAtIndex:。
顺便说一下,&#34; paramsArray&#34;是一个糟糕的财产名称。属性名称不应编码用于实现它的类型。如果你查看索引访问者名称的模板,你会发现Apple期望很多关系属性只是一个复数名词,比如&#34; params&#34; (没有&#34;数组&#34;)。例如,-paramsAtIndexes:优于-paramsArrayAtIndexes:。
答案 1 :(得分:1)
您必须将您的阵列视为控制器的后备存储,并且它正在为您管理它。
添加对象:
[[self accountsArrayController] addObject:accountDictionary];
删除当前选定的对象:
[[self accountsArrayController] remove:nil];
您必须再写一两行才能选择上一个项目,但这是我留给您的练习。