Objective c KVO正在处理此代码
为了更好地理解KVO,我创建了一个简单的应用程序,其中包含1个按钮和2个非常基本的模型类:Book和Author。我想在作者改变时触发这本书。例如,一个简单的KVO示例,为什么这不会触发观察者Objective c KVO正在处理此代码,objective-c,cocoa,key-value-observing,Objective C,Cocoa,Key Value Observing,为了更好地理解KVO,我创建了一个简单的应用程序,其中包含1个按钮和2个非常基本的模型类:Book和Author。我想在作者改变时触发这本书。例如,一个简单的KVO示例,为什么这不会触发观察者 #import "AppDelegate.h" #import "Book.h" #import "Author.h" @implementation AppDelegate { Book *home; Author *nancy; } - (void)applicationDidFi
#import "AppDelegate.h"
#import "Book.h"
#import "Author.h"
@implementation AppDelegate {
Book *home;
Author *nancy;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
NSLog(@"FunWithKVO");
nancy = [[Author alloc] init];
[nancy setFirstName:@"Nancy"];
[nancy setLastName:@"Drew"];
home = [[Book alloc] init];
[home addObserver:nancy forKeyPath:@"lastName" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
[home setAuthor:@"Nancy Drew"];
}
- (IBAction)changeName:(id)sender {
NSLog(@"%@",[home author]);
[nancy setLastName:@"Martin"];
}
@end
现在,这应该被称为,但不是:
#import "Book.h"
@implementation Book
@synthesize author;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
[author setValue:[NSString stringWithFormat:@"Nancy %@",[change value]]];
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
NSLog(@"name is now: %@",author);
}
@end
您在注册中混淆了观察对象和观察对象。
nancy
是home
要观察的对象,因此它应该是
[nancy addObserver:home forKeyPath:@"lastName" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
没有必要粗鲁;你的代码错了,不是框架错了。你知道你是个天才,大写字母G。