若然,如何?
这似乎是一件非常有用的事情,但我不能为我的生活弄明白或在网上找到任何信息!
我想到的具体情况是我有两个相邻的表,左边最初包含一个名称列表,然后我想“向左移动”和“向右移动”按钮将名称从一个表移动到另一个表。
我认为这个问题的优雅解决方案是使用一个带有两个Controller Keys的数组控制器“arrangeLeftObjects”和arrangeRightObjects“
我在这里疯了!有人可以请一些亮点。我会根据请求发布示例代码。
非常感谢
编辑:初次尝试
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”
,就会中断答案 0 :(得分:0)
你不想这样做。您应该始终为每个表视图使用一个NSArrayController
。在您的情况下,您应该有两个支持数组,一个用于左对象,另一个用于右对象。
然后,您应该通过自己的数组控制器将每个表视图绑定到相应的数组。
然后,您应该实现一个单独的控制器来管理数组之间的数据传输,方法是使用符合KVO的访问器直接操作数组,或者使用NSArrayController
的各种插入/删除方法。