【问题标题】:KVO working on this codeKVO 处理此代码
【发布时间】:2013-12-21 00:25:49
【问题描述】:

为了更好地理解 KVO,我创建了一个简单的应用程序,其中包含 1 个按钮和 2 个非常基本的模型类:Book 和 Author。我想在作者更改时触发这本书。比如一个简单的KVO例子,为什么不触发观察者?

#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

【问题讨论】:

  • 没有必要粗鲁;你的代码错了,不是框架。

标签: objective-c cocoa key-value-observing


【解决方案1】:

您在注册时混淆了观察对象和被观察对象。 nancyhome要观察的对象,所以应该是

[nancy addObserver:home forKeyPath:@"lastName" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];

【讨论】:

  • 你知道你是一个大写 G 的天才吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多