在我的应用程序中,我创建了我的自定义类,我正在使用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:我写信时匆匆写信,如果有任何写作错误,请为我的坏英语道歉。答案 0 :(得分:5)
如果直接分配给实例变量而不是通过设置器,则需要使用willChangeValueForKey:
和didChangeValueForKey:
自行发出更改通知。变量赋值没有魔力。
答案 1 :(得分:5)
将text
替换为self.text
作为观察者子系统与作为属性合成的getter和setter方法绑定。