我正在尝试做简单的 KVO 示例,但遇到了问题。
这是我的 *.m 文件:
#import "KVO_ViewController.h"
@interface KVO_ViewController ()
@property NSUInteger number;
@end
@implementation KVO_ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self addObserver:self forKeyPath:@"number" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)incNumber:(id)sender
{
_number++;
NSLog(@"%d", _number);
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"From KVO");
if([keyPath isEqualToString:@"number"])
{
id oldC = [change objectForKey:NSKeyValueChangeOldKey];
id newC = [change objectForKey:NSKeyValueChangeNewKey];
NSLog(@"%@ %@", oldC, newC);
}
}
@end
Note:我有一个按钮,单击它会增加number
财产。
我想在什么时候收到通知number
属性被改变。
该代码无法正常工作,我不明白为什么。
KVO 与 setter 和 getter 一起使用incNumber
您直接访问 iVar,而不是使用self.number
- (IBAction)incNumber:(id)sender
{
self.number++;
NSLog(@"%d", self.number);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)