单身和KVO的问题

时间:2010-11-10 22:37:24

标签: iphone objective-c ios4

在我的应用程序中,我创建了我的自定义类,我正在使用KVO观察其中一个属性,因此如果其值发生更改,它会立即显示在firstview控制器对象中(标签或..)

示例代码

myCustomClass.h

@interface myCustomClass : NSObject {
    NSString * text;
}
@property (nonatomic, retain) NSString * text;
- (void)changetext;

myCustomClass.m

@implementation myCustomClass

@synthesize text;
static myCustomClass * _sharedInstance;

- (id)init
{
    if ((self = [super init])) {
        text = @ "";
    }
    return self;
}

+ (myCustomClass *)sharedInstance
{
    if (!_sharedInstance) {
        _sharedInstance = [[myCustomClass alloc] init];
    }

    return _sharedInstance;
}
- (void)changetext {
    text = @ "changed";
}

firstViewController.h

@interface FirstViewController:UIViewController {

    IBOutlet UILabel * label;
}
@property (nonatomic, retain) IBOutlet UILavel * label;

firstviewController.m

@implementation FirstViewController

@synthesize label;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id) object change:(NSDictionary *)change context:(void *)context
{
    label.text = [change valueForKey:@ "new"];
}
- (void)viewDidLoad {
    myCustomClass * myEngine = [myCustomClass sharedInstance];
    [myEngine addObserver : self forKeyPath : @ "text" options : NSKeyValueObservingOptionNew context : nil];
    [myEngine changetext];

    [super viewDidLoad];
}

但它没有改变数据,任何人都可以告诉我哪里错了?

提前致谢

P.S:我写信时匆匆写信,如果有任何写作错误,请为我的坏英语道歉。

2 个答案:

答案 0 :(得分:5)

如果直接分配给实例变量而不是通过设置器,则需要使用willChangeValueForKey:didChangeValueForKey:自行发出更改通知。变量赋值没有魔力。

答案 1 :(得分:5)

text替换为self.text作为观察者子系统与作为属性合成的getter和setter方法绑定。