<p>A class has a property (and instance var) of type NSMutableArray with synthesized accessors (via <code>@property</code>). If you observe this array using:</p>

<pre><code>[myObj addObserver:self forKeyPath:@"theArray" options:0 context:NULL];
</code></pre>

<p>And then insert an object in the array like this:</p>

<pre><code>[myObj.theArray addObject:NSString.string];
</code></pre>

<p>An observeValueForKeyPath... notification is <strong>not</strong> sent. However, the following does send the proper notification:</p>

<pre><code>[[myObj mutableArrayValueForKey:@"theArray"] addObject:NSString.string];
</code></pre>

<p>This is because <code>mutableArrayValueForKey</code> returns a proxy object that takes care of notifying observers.</p>

<p>But shouldn't the synthesized accessors automatically return such a proxy object? What's the proper way to work around this--should I write a custom accessor that just invokes <code>[super mutableArrayValueForKey...]</code>?</p>

You need to wrap your
```
addObject:
```
call in
```
willChangeValueForKey:
```
and
```
didChangeValueForKey:
```
calls. As far as I know, there's no way for the NSMutableArray you're modifiying to know about any observers watching its owner.