可可:NSArrayController可以分类以提供自定义的“控制器密钥”吗?
如果是这样,怎么样?可可:NSArrayController可以分类以提供自定义的“控制器密钥”吗?
这似乎是一个非常有用的事情能够做到,但我不能为我的生活弄清楚或找到网上的任何信息!
我记住的具体情况是我有两个相邻的表格,左边最初包含一个名称列表,然后我要“向左移动”和“向右移动”按钮将名称从一个表格移动到另一个表格。
我想到了一个优雅的解决这个问题是使用一个阵列控制器有两个控制键“arrangedLeftObjects”和arrangedRightObjects”
我要在这里疯狂!有人可以提供一些线索。我会上张贴请求例如代码
非常感谢
编辑:初始尝试
的NSArrayController的子类被实现(到目前为止)正是如此:
@interface LeftRightArrayController : NSArrayController {
NSArray * leftObjects;
}
-(NSArray *)leftObjects;
-(void)setLeftObjects:(NSArray *)newLeftObjects;
@end
@implementation LeftRightArrayController
-(NSArray *)leftObjects {
return leftObjects;
}
-(void)setLeftObjects:(NSArray *)newLeftObjects {
leftObjects = newLeftObjects;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
[self setLeftObjects:[NSArray arrayWithArray:[self arrangedObjects]]];
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
@end
,并提供给控制器的数据:
[myArrayController addObserver:myArrayController forKeyPath:@"arrangedObjects" options:0 context:NULL];
NSString *myKey = [NSString stringWithString:@"name"];
NSDictionary *myNewDictionary1 = [NSDictionary dictionaryWithObject:@"date1" forKey:myKey];
NSArray *myArray = [NSArray arrayWithObjects:myNewDictionary1, nil];
[myArrayController setContent:myArray];
此代码的工作时,我只绑定到“左,右阵列Controller.arrangedObjects.name” 但是作为休息尽快尝试绑定到“Left Right Array Controller.leftObjects.name”
您不想这样做。每个表格视图应始终使用一个NSArrayController
。在你的情况下,你应该有两个支持数组,一个用于左对象,另一个用于正确的对象。
然后,您应该通过自己的数组控制器将每个表视图绑定到适当的数组。
然后,您应该实现一个单独的控制器,通过使用符合KVO的访问器直接操作阵列或使用NSArrayController
的各种插入/删除方法来管理阵列之间的数据传输。
看起来像一个荒谬的数组控制器的数量可能(在我的潜在天真的意见)可以实现只有一个和几个自定义键。 – 2012-04-02 23:02:02
说我很疯狂,想按照我的方式去做,可以吗?可以做到吗?为什么它是不受欢迎的? – 2012-04-02 23:02:38
因为这不是阵列控制器的工作方式。每个表视图应始终有一个阵列控制器。这就是他们设计的工作方式。我不认为两个阵列控制器而不是一个“疯狂”。如果你不需要,你不应该继承子类。只需创建一个轻量级定制控制器来进行数组移位,然后使用本机阵列控制器来处理表格显示。 – 2012-04-02 23:05:12
发表你已经尝试过的例子。 – trudyscousin 2012-04-02 20:48:14
我已经把一些代码。它似乎像自定义控制器键将是一个有用的事情能够做到这一点,我看不到任何地方,所以我已经变得可疑。 – 2012-04-02 21:35:36