u16suzuの blog

日々学んだことのメモブログです。

KVO

あるオブジェクトのプロパティが変更されたことを検知できる. 非同期でネットからデータ持ってきてうんぬんかんぬんするときに便利.

static char LoadTwitterIconUrlKVONotification_Dictionary;

-(void)updateIconURL{
    // KVO登録
    [self addObserver:self forKeyPath:@"twitterIconURL"
              options:NSKeyValueObservingOptionNew
              context:&LoadTwitterIconUrlKVONotification_Dictionary];
    self.twitterIconURL = [self loadTwitterIconURL];
}

// 値変更時に実行されるメソッド
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ( context == &LoadTwitterIconUrlKVONotification_Dictionary && ![change[@"new"] isEqual:[NSNull null]] )
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:notificationTwitterIconURLUpdated object:self userInfo:@{@"user": self}];
    }
}