0

私は現在、キー値の観察を学んでいます。非常に単純なKVOプロジェクトには、observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)contextメソッドが呼び出されたときにプロパティの新しい値の変更を出力しないという小さな問題があります。それは非常に奇妙です。誰かが問題が発生した場所を見つけるのを手伝ってくれることを願っています。

ここに私のソースコードがあります:

ViewController.h

#import <UIKit/UIKit.h>

@class Person;

@interface ViewController : UIViewController

@property (nonatomic, strong) Person *person;

@end

ViewController.m

#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize person;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.person = [[Person alloc] init];
    [self changeName];
    [self.person addObserver:self
             forKeyPath:@"fullName"
                options:NSKeyValueObservingOptionNew
                context:NULL];
}

- (void)changeName
{
    self.person.fullName = @"Andy";
}

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if ([keyPath isEqualToString:@"fullName"])
    {
        NSLog(@"%@", change);
        NSString *string = [change objectForKey:NSKeyValueChangeNewKey];
        NSLog(@"%@", string);
    }
}

- (void)dealloc
{
    [self.person removeObserver:self forKeyPath:@"fullName"];
}

@end

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, strong) NSString *fullName;

@end

人.m

#import "Person.h"

@implementation Person

@synthesize fullName = _fullName;

@end
4

2 に答える 2