举个例子如下:
Project *project = [[Project alloc] init];
project.title = @"MyProject";
project.field = @"SomeOtherField";
Run Code Online (Sandbox Code Playgroud)
我想在更改属性时设置标志.当通过点语法完成属性更改时,有什么办法可以做到这一点?
我可以覆盖
- (void) setValue:(id)value forKey:(NSString *)key
Run Code Online (Sandbox Code Playgroud)
并使用KVC设置对象属性:
[project setValue:@"SomeOtherField" forKey:@"field"];
Run Code Online (Sandbox Code Playgroud)
但点语法总是看起来更干净;)
谢谢!
Key-Value Observing如果您要使用多个属性/对象,请使用此选项.
注册为观察员:
[project addObserver:self
forKeyPath:@"title"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOldKey)
context:NULL];
Run Code Online (Sandbox Code Playgroud)
实现更改处理程序
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([object isKindOfClass:[Project class]] && [keyPath isEqual:@"title"]) {
//do something with [change objectForKey:NSKeyValueChangeNewKey];
}
[super observeValueForKeyPath:keyPath
ofObject:object
change:change
context:context];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |