我在学习可可大约2周,目前我正在尝试理解绑定,我可以将2个非UI属性绑定在一起吗?
我尝试以编程方式绑定它们,但似乎无法让它工作。
[ClassA bind: @"property1"
toObject: ClassB // <--------Error here
withKeyPath:@"propert2"
options:bindingOptions];
我想我可能会一起弄错,任何帮助或方向都会受到赞赏。
提前感谢,
此致 特伦斯
答案 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。