2010-04-28 18 views
17

मैं एक ViewController एक UIView का उदाहरण बनाकर दिया है, और फिर मैं उदाहरण के साथ एक पर्यवेक्षक रजिस्टर, जैसे किobserveValueForKeyPath नहीं बुलाया जा रहा है

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

तो, एक ही फाइल में, मेरे पास है:

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

लेकिन, हालांकि मैं जाँच की है और दोबारा जांच कि logoAnimation.patrocinioDidLoad बदल गया है, observeValueForKeyPath कहा जाता हो जाता है कभी नहीं ...

मैं कुछ याद आ रही है?

सहायता के लिए धन्यवाद!

एंटोनियो

उत्तर

20

यह हल: मैं Logo एनीमेशन सीधे में patrocinioDidLoad की स्थापना की गई थी, मानक getters और setters का उपयोग किए बिना। एनीमेशन,

patrocinioDidLoad = YES; 
में

, काम नहीं किया है, जबकि

self.patrocinioDidLoad = YES; 

किया!

+0

धन्यवाद आपने मेरी समस्या हल की है मेरे लिए, लोगो एनीमेशन = [[मेनलोगोएनीमेशन आवंटन] init]; काम नहीं किया लेकिन self.logoAnimation = [[MainLogoAnimation alloc] init] autorelease]; काम करता है। – ssj

+0

तो अगर आप @synthesize द्वारा बनाए गए सेटर्स और गेटर्स का उपयोग करना चाहते हैं तो आपको हमेशा "स्वयं" रखना होगा? – gonzobrains

+0

वाह! मेरे कोड का परीक्षण करने के घंटों के बाद यह पता लगाने के लिए कि क्यों obserValueForKeyPath कभी नहीं कहा जा रहा था, मुझे अंततः पता चला कि यही कारण है कि। ऐप्पल ने इसे दस्तावेज़ों में क्यों बोल्ड नहीं किया है, जिसे इसे काम करने के लिए सेटटर के माध्यम से जाना चाहिए (और इस प्रकार ivar के बजाय संपत्ति का उपयोग करें)? – ArtOfWarfare

संबंधित मुद्दे