#KVO-Demo
addObserve
[self addObserver:self forKeyPath:@"items" options:0 context:nil];
keyValueChanged
[self willChangeValueForKey:@"items"];
[self didChangeValueForKey:@"items"];
listen for changes to the items delegate
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context