相关疑难解决方法(0)

bind:toObject:withKeyPath:options:是单向绑定吗?

我有两个窗口:窗口A是从NIB加载的; 和Window B以编程方式创建.

两个窗口都有一个NStextView:窗口A中textview的attributionString绑定到使用IBtext的模型的属性; 而Window B中textview的attributionString绑定到模型的属性使用方法.text-[NSObject bind:toObject:withKeyPath:options:]

[textview bind:@"attributedString"
      toObject:obj
   withKeyPath:@"text"
       options:nil];
Run Code Online (Sandbox Code Playgroud)

这是奇怪的事情:Window B中的textview确实绑定了obj.text,但textview中的更改永远不会更新obj.text.但是,如果我在窗口A的文本视图中进行了更改,则obj.text窗口B中的文本视图也会相应更新.

所以我在想,这个-[NSObject bind:toObject:withKeyPath:options:]方法只适用于单向绑定.我在Cocoa文件中找不到明确的解释.有没有人遇到过这个问题?如何在代码中实现双向绑定?

cocoa binding nstextview cocoa-bindings

8
推荐指数
1
解决办法
3117
查看次数

是否有必要覆盖bind:toObject:withKeyPath:options:在NSView子类中实现绑定?

我有一个NSView子类,它具有我想要绑定的属性.我在子类中实现了以下内容:

myView.h:

@property (readwrite, retain) NSArray *representedObjects;
Run Code Online (Sandbox Code Playgroud)

myView.m:

@synthesize representedObjects;

+(void)initialize
{
    [self exposeBinding: @"representedObjects"];
}


-(void)bind:(NSString *)binding toObject:(id)observableController withKeyPath:(NSString *)keyPath options:(NSDictionary *)options
{
    if ([binding isEqualToString:@"representedObjects"]) {
        [observableController addObserver: self forKeyPath:@"arrangedObjects" options:NSKeyValueChangeNewKey context:nil];
    } else {
        [super bind: binding toObject:observableController withKeyPath:keyPath options: options];
    }
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"arrangedObjects"]) {
        [self setRepresentedObjects: [object arrangedObjects]];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了对arrayController的绑定-[AppController awakeFromNib]:

[myView bind:@"representedObjects" toObject:arrayController withKeyPath:@"arrangedObjects" options: nil];
Run Code Online (Sandbox Code Playgroud)

这是实现绑定的正确方法吗?它涉及很多锅炉板代码,这让我觉得我做错了.

我认为NSObject会自动实现我手动完成的工作,-bind:toObject:withKeyPath:options:但事实并非如此.如果我注释掉我-bind:toObject:withKeyPath:options: …

cocoa objective-c cocoa-bindings

6
推荐指数
1
解决办法
2130
查看次数

标签 统计

cocoa ×2

cocoa-bindings ×2

binding ×1

nstextview ×1

objective-c ×1