That's exactly what you do. 

Declare the property as NSArray, that's what your clients see. In most cases 
you actually use an NSMutableArray as the backing variable so you can easily 
mutate it, you can either return that mutable array as the value of your 
property, or you can return a non-mutable copy of it. I normally return the 
actual array as the property is declared non-mutable so code that tries to 
mutate it produces lots of errors and warnings. If you're paranoid, copy it 
before return. 

Then, in the class which owns it, either implement the KVC indexed accessor 
methods (like insertObject:in<Key>AtIndex:) and call those, or use [ self 
mutableArrayValueForKey:<Key> ] to get a mutable array which also generates the 
correct KVC calls. Any observer of the property will get the correct KVO calls. 


On Jul 11, 2012, at 2:17 PM, Rick Mann wrote:

> I feel certain people have run into this before, but my Googling didn't turn 
> up exactly what I was looking for.
> 
> I'd like to create a "mutable read-only" array property. I want clients of 
> the class to be able to observe changes to the *contents* of the array (that 
> is, if an element is added or removed), in addition to changes of the entire 
> array. But I don't want those clients to be able to add or remove anything 
> to/from the array themselves; I only want the class on which the property is 
> defined to be able to do that.
> 
> Is this possible? My first thought is to make a read-only NSArray* property, 
> but then it seems that addition or removal of elements to/from that property 
> wouldn't get observed; i.e., an NSArray should never change its contents.
> 
> What's the right way to do this? Thanks!
> -- 
> Rick
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list ([email protected])
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/rols%40rols.org
> 
> This email sent to [email protected]


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to