9

Event と呼ばれる NSManagedObject のサブクラスであるエンティティがあります。KVO 変更通知用に、このエンティティのいくつかのモデル化された属性も登録しました。

[self.event addObserver:self
             forKeyPath:@"numGuests"
                options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                context:&numGuestsContext];

[self.event addObserver:self
             forKeyPath:@"checkedIn"
                options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                context:&checkedInContext];

[self.event addObserver:self
             forKeyPath:@"seatedCount"
                options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                context:&seatedContext];

ただし、変更辞書の NSKeyValueChangeOldKey と NSKeyValueChangeNewKey の値が等しいにもかかわらず、observeValueForKeyPath メソッド通知がトリガーされているようです???

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
    NSNumber *oldValue = [change valueForKey:NSKeyValueChangeOldKey];
    NSNumber *newValue = [change valueForKey:NSKeyValueChangeNewKey];

    if ([oldValue isEqualToNumber:newValue])
    {
        return;
    }

今のところ、それらが等しいかどうかを確認するために簡単な健全性チェックを行うことに頼っていますが、なぜこの通知が最初に発生するのかを理解したいですか?

更新: @jszumski は、論理的には等しいがオブジェクトが異なるため、これが発生する可能性が最も高いとコメントで述べました。イベントエンティティオブジェクトは常に同じアドレスを持っていますが、私が観察しているオブジェクトはエンティティ内の属性であり、理由はわかりませんがアドレスを変更し続けています??

bg クエリ スレッドでこの値にアクセスすると、Core Data が同じ値を持つエンティティ内に新しい内部オブジェクトを作成する可能性があるかどうか疑問に思っていますか?

4

1 に答える 1