2010-04-28 19 views
17

Tôi đã một ViewController tạo một thể hiện của một UIView, và sau đó tôi đăng ký một người quan sát với các trường hợp, chẳng hạn rằngobserveValueForKeyPath không được gọi

logoAnimation = [[MainLogoAnimation alloc] init]; 
[logoAnimation addObserver:self forKeyPath:@"patrocinioDidLoad" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil]; 

sau đó, trong cùng một tập tin, tôi có:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
NSLog(@"%@ \n %@ \n %@ \n ",keyPath,object,change); 
} 

Nhưng, mặc dù tôi đã kiểm tra và kiểm tra lại rằng logoAnimation.patrocinioDidLoad đã thay đổi, không bao giờ được gọi observeValueForKeyPath ...

tôi có thiếu cái gì?

Cảm ơn sự giúp đỡ!

Antonio

Trả lời

20

Giải quyết nó: tôi đã thiết lập patrocinioDidLoad trong logoAnimation trực tiếp, mà không sử dụng thu khí tiêu chuẩn và setters. Trong logoAnimation,

patrocinioDidLoad = YES; 

không hiệu quả, trong khi

self.patrocinioDidLoad = YES; 

đã làm!

+0

cảm ơn bạn đã giải quyết được sự cố của tôi Đối với tôi, một cái gì đó như logoAnimation = [[MainLogoAnimation alloc] init]; không hoạt động nhưng self.logoAnimation = [[MainLogoĐịnh mức phân cấp] init] autorelease]; công trinh. – ssj

+0

Vì vậy, bạn luôn phải đặt "tự" ở phía trước nếu bạn muốn sử dụng bộ định vị và getters được tạo bởi @synthesize? – gonzobrains

+0

WOW! Sau nhiều giờ kiểm tra mã của tôi để tìm hiểu lý do tại sao obserValueForKeyPath không bao giờ được gọi, cuối cùng tôi đã tìm thấy rằng đây là lý do tại sao. Tại sao Apple không in đậm nó trong tài liệu mà người ta phải đi qua setter (và do đó sử dụng tài sản thay vì ivar) để nó hoạt động? – ArtOfWarfare

Các vấn đề liên quan