Cocoa绑定在不同类中的2个属性之间

时间:2011-10-14 03:52:09

标签: cocoa binding cocoa-bindings

我在学习可可大约2周,目前我正在尝试理解绑定,我可以将2个非UI属性绑定在一起吗?

我尝试以编程方式绑定它们,但似乎无法让它工作。

[ClassA bind: @"property1"
       toObject: ClassB // <--------Error here 
    withKeyPath:@"propert2"
        options:bindingOptions];

我想我可能会一起弄错,任何帮助或方向都会受到赞赏。

提前感谢,

此致 特伦斯

1 个答案:

答案 0 :(得分:2)

是 - 将任意属性绑定到另一个属性是完全有效的。这在自动更新UI时通常很有用,这就是Apple的许多示例展示用户界面元素属性的原因。但绑定不限于任何方式的UI对象。请参阅下面的具体示例:

//
//  AppDelegate.m
//  StackOverflow
//
//  Created by Stephen Poletto on 10/15/11.
//

#import "AppDelegate.h"

@interface ClassA : NSObject {
    NSString *propertyA;
}

@property (copy) NSString *propertyA;

@end

@interface ClassB : NSObject {
    NSString *propertyB;
}

@property (copy) NSString *propertyB;

@end

@implementation ClassA
@synthesize propertyA;
@end

@implementation ClassB
@synthesize propertyB;
@end

@implementation AppDelegate

@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    ClassA *a = [[ClassA alloc] init];
    ClassB *b = [[ClassB alloc] init];

    [a bind:@"propertyA" toObject:b withKeyPath:@"propertyB" options:nil];

    // Now that the binding has been established, if propertyB is set on 'b',
    // propertyA will automatically be updated to have the same value.
    [b setPropertyB:@"My Message"];
    NSLog(@"A's propertyA: %@", [a propertyA]); // Prints 'MyMessage'. Success!
}

@end

请注意,bind:在类的实例上调用,而不是在类本身上调用。如果你是Cocoa的新手,你应该知道绑定是一个比较困难的概念,你应该确保在使用之前了解KVC和KVO。