2016-07-27 2 views
0

객체의 인스턴스를 추적하여 객체가 할당되고 초기화되는지 또는 nil로 설정되는지 여부를 확인할 수 있습니까?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

직접 변수에 액세스하는 대신 속성 setter를 사용하는 경우 제대로 작동해야합니다 ("직장"에 대한 귀하의 정의를 올바르게 추측했다고 가정). (즉,'self.testObj = [[TestObject alloc] init];') –

+0

@PhillipMills 감사합니다. 방금 재산 세터를 사용했고 효과가있었습니다! 값을 직접 nil에 할당하면 콜백이 호출되지 않습니다. 이제는 세터와 함께 일하고 있습니다. 다시 한번 감사드립니다. –

답변

0

은 속성 세터를 사용하여 일을 가지고 할 수 있었다.

그래서, 대신 :

_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)의 도움을 받아 속성 설정기를 사용하여 작업 할 수있었습니다. 답변 감사합니다. –

관련 문제