2016-07-27 7 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

バッキング変数に直接アクセスするのではなく、プロパティ設定ツールを使用すると、機能するはずです(「仕事」の定義について正しいと推測したと仮定して)。 (つまり、 '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

私はフィリップミルズの助けを借りてプロパティセッターを使って仕事をしました。答えてくれてありがとう。 –

関連する問題