вопрос о КВО и методе "наблюдаем значение для ключа" - PullRequest
1 голос
/ 23 августа 2011

Можете ли вы помочь мне разобраться с методом наблюдающего значения для ключа:

здесь кажется, что наблюдаемыйValueForKeyPath вызывается, потому что мы изменили значение "для ключа: earthquakeList", но, скажем, у нас есть другой наблюдаемый ключ, например, "earthquake_New_List",

как я могу узнать, что первый или второй наблюдаемый ключ изменился, если у нас есть только один метод обратного вызова, наблюдающегоВалюФорКейПата?

[self addObserver:self forKeyPath:@"earthquakeList" options:0 context:NULL];
//...
- (void)insertEarthquakes:(NSArray *)earthquakes
{
    // this will allow us as an observer to notified (see observeValueForKeyPath)
    // so we can update our UITableView
    //
    [self willChangeValueForKey:@"earthquakeList"];
    [self.earthquakeList addObjectsFromArray:earthquakes];
    [self didChangeValueForKey:@"earthquakeList"];
}

// listen for changes to the earthquake list coming from our app delegate.
- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    [self.tableView reloadData];
}

Спасибо

1 Ответ

3 голосов
/ 23 августа 2011

Параметр keyPath в вашей реализации observeValueForKeyPath:ofObject:change:context: сообщит вам, какой ключ изменился.Таким образом, вы можете сделать что-то вроде:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if ([keyPath isEqualToString:@"key1"]) {
        // do something
    } else if ([keyPath isEqualToString:@"key2"]) {
        // do something else
    }
}
...