假设我有这样一个类:
@interface MyClass : NSObject
@property (nonatomic, strong, getter=theDataGetter) NSMutableArray* theData;
@end
@implementation MyClass
-(NSMutableArray *)theDataGetter
{
return [self mutableArrayValueForKeyPath:@"theData"];
}
@end
这里,由于 theData 属性的kvo complience(其他kvo complience方法被跳过)并且通过 mutableArrayValueForKeyPath ,我可以观察到<上面的插入,更新,删除操作strong> theData 属性。 现在假设这个数组包含可变字典。
self.obj = [[MyClass alloc] init];
_obj.theData = [[NSMutableArray alloc] initWithObjects:
[NSMutableDictionary dictionaryWithObjectsAndKeys:@"The one with glasses.",@"description",@"Manny",@"name", nil],
[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Looks a little like Governor Dewey.",@"description",@"Moe",@"name", nil],
[NSMutableDictionary dictionaryWithObjectsAndKeys:@"The one without a mustache.",@"description",@"Jack",@"name", nil],
nil];
现在我的问题是如何观察 theData 数组中任何字典的“description”键值的变化。假设我想观察第一个对象的描述键的值的变化,而不是现在持有的东西。
答案 0 :(得分:2)
如果你想观察数组description
的任何对象的theData
属性,唯一的方法就是直接将观察者附加到它。
[_obj.theData[0] addObserver:<observing object>
forKeyPath:@"description"
options:(NSKeyValueObservingOptionNew |
NSKeyValueObservingOptionOld)
context:NULL];
这将观察第一个对象的变化。