2016-07-27 97 views
0

是否有可能跟蹤對象的實例以檢查其是否已分配並初始化或設置爲零?iOS - 使用KVO跟蹤對象實例

我在.h文件中聲明瞭對象,並在.m文件中嘗試過。

@interface ViewController : UIViewController 

@property (nonatomic, strong) TestObject *testObj; 

@end 

然後我試了這個,但沒有奏效。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self addObserver:self forKeyPath:@"testObj" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; 

    _testObj = [[TestObject alloc] init]; 
} 
+0

看到這個[鍵 - 值觀察(http://nshipster.com/key-value-observing/ ) –

+0

如果你使用屬性設置器而不是直接訪問支持變量,它應該可以工作(假設我已經猜到了你的「工作」的定義)。 (即'self.testObj = [[TestObject alloc] init];') –

+0

@PhillipMills謝謝!我只是使用了屬性設置器並且工作正常!當我直接將值賦給nil時,回調函數沒有被調用。現在它正在與二傳手合作。再次感謝。 –

回答

0

好不容易纔得到它通過使用屬性setter工作。

因此,而不是:

_testObj = [[TestObject alloc] init]; 

我喜歡它:

self.testObj = [[TestObject alloc] init]; 
0

嘗試這樣的:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self addObserver:self forKeyPath:NSStringFromSelector(@selector(testObj)) options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; 

    _testObj = [[TestObject alloc] init]; 
} 

然後觀察這樣的:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{ 

     if ([keyPath isEqualToString:NSStringFromSelector(@selector(testObj))]) { 
    //PERFORM YOUR OPERATIONS 
    } 
    } 
+0

謝謝,但結果與我所做的一樣。 –

+0

你可以請顯示你如何檢查testObj? –

+0

我設法通過Philip Mills的幫助,通過使用屬性設置器來實現它。謝謝你的答案。 –