2016-07-27 86 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的帮助,通过使用属性设置器来实现它。谢谢你的答案。 –