类具有NSMutableArray类型的属性(和实例var),具有合成访问器(via @property).如果使用以下方法观察此数组:
[myObj addObserver:self forKeyPath:@"theArray" options:0 context:NULL];
Run Code Online (Sandbox Code Playgroud)
然后在数组中插入一个对象,如下所示:
[myObj.theArray addObject:NSString.string];
Run Code Online (Sandbox Code Playgroud)
不发送observeValueForKeyPath ...通知.但是,以下内容确实发送了正确的通知:
[[myObj mutableArrayValueForKey:@"theArray"] addObject:NSString.string];
Run Code Online (Sandbox Code Playgroud)
这是因为mutableArrayValueForKey返回一个负责通知观察者的代理对象.
但是,合成访问器不应该自动返回这样的代理对象吗?解决这个问题的正确方法是什么 - 我应该编写一个只调用的自定义访问器[super mutableArrayValueForKey...]吗?