我想使用KVO监听一个NSArray属性的集合变化事件。在公开范围内,该属性是只读的NSArray,但是由于需要修改集合,它是由一个NSMutableArray实例变量来支持的。
我知道我可以将属性设置为新值以获取“set”更改,但我对添加、删除、替换更改很感兴趣。如何正确地通知这些类型的NSArray更改?
@interface Model : NSObject
@property (nonatomic, readonly) NSArray *items;
@end
@implementation Model {
NSMutableArray *_items;
}
- (NSArray *)items {
return [_items copy];
}
- (void)addItem:(Item *)item {
[_items addObject:item];
}
@end
Model *model = [[Model alloc] init];
[observer addObserver:model
forKeyPath:@"items"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
Item *item = [[Item alloc] init];
[model addItem:newItem];
观察者类:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"items"]) {
//Not called
}
}
@implementation
ivarsгҖӮи§ЈеҶіж–№жЎҲзҡ„ж ёеҝғжҳҜзҙўеј•и®ҝй—®еҷЁж–№жі•гҖӮиҜ·жіЁж„ҸPeter Hoseyзҡ„зӯ”жЎҲ - жӮЁдёҚеә”иҜҘе…¬ејҖж•°з»„гҖӮ - jscsNSArrayController
,但它在iOS中不可用。 - Kevin DiTraglia