2014-11-04 75 views
1

我試圖觀察ResultDataClass的屬性變量(xxx)。在我的工作ViewController中,我寫了以下內容。KVO不工作(觀察另一個班的屬性)

-(void)dealloc {  
    ResultDataClass *resultData = [ResultDataClass getInstance]; 
    [resultData addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionNew context:NULL]; 
} 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    self.solutionText.text = @"test1"; 

    if([keyPath isEqualToString:@"xxx"]) { 
     self.solutionText.text = @"test2"; 
    } 

} 

solutionText是我的工作ViewController一個UITextView。 運行該程序後,textview中沒有顯示任何內容。

任何人都知道如何解決這個問題?

謝謝你,對不起我的英文。

+1

你爲什麼要調整設定了上'內self''dealloc'? – trojanfoe 2014-11-04 08:25:03

回答

1

你寫了觀察者在dealloc方法。會有一個問題,當你添加一個觀察者時你的對象被釋放,所以當KVO值被改變時會發生崩潰。

有沒有崩潰,沒有任何工作,我認爲原因是;永遠不會調用dealloc方法。這意味着你的視圖控制器永遠不會被釋放(可能是泄漏,強大的保留週期在那裏)。

取而代之的是添加在您的viewDidLoad中:

- (void)viewDidLoad 
{  
    [super viewDidLoad]; 
    ResultDataClass *resultData = [ResultDataClass getInstance]; 
    [resultData addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionNew context:NULL]; 
} 
+0

非常感謝。我以前寫過viewDidLoad方法,但沒有顯示任何內容。 – user 2014-11-04 07:25:49

+0

@user:將'[ResultDataClass getInstance];'返回單例實例? – 2014-11-04 07:31:24

+0

是的。我使用ResultDataClass從其他類收集所有數據。 – user 2014-11-04 09:54:54