【发布时间】:2012-04-02 20:33:36
【问题描述】:
如果是这样,怎么做?
这似乎是一件非常有用的事情,但我一生都无法弄清楚或在网上找到任何信息!
我想到的具体情况是我有两个相邻的表,左边最初包含一个名称列表,然后我想要“向左移动”和“向右移动”按钮将名称从一个表移动到另一个。
我认为这个问题的一个优雅的解决方案是使用一个数组控制器和两个控制器键“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];
当我只绑定到“Left Right Array Controller.arrangedObjects.name”时,此代码有效 但是一旦我尝试绑定到“Left Right Array Controller.leftObjects.name”就会中断
【问题讨论】:
-
发布一个你已经尝试过的例子。
-
我已经放了一些代码。似乎自定义控制器键将是一件非常有用的事情,而且我在任何地方都没有看到任何提及它,所以我开始怀疑。
标签: cocoa cocoa-bindings key-value-observing nsarraycontroller subclassing