• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: indexed accessor properties and NSArray/NSMutableArray's
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: indexed accessor properties and NSArray/NSMutableArray's


  • Subject: Re: indexed accessor properties and NSArray/NSMutableArray's
  • From: Negm-Awad Amin <email@hidden>
  • Date: Tue, 5 Aug 2008 19:26:41 +0200



Am Di,05.08.2008 um 19:11 schrieb Roland King:


Roland,

How are you mutating your array? If you do [[myObject mutableArrayValueForKey:@"myArray"] addObject:anObject], it should preserve the current NSMutableArray even without indexed accessors. This seems to work in my testing, at least.
Yup, that works, because the methods -mutableArrayValueForKey:, - mutableArrayValueForKeyPath:, -mutableSetValueForKey: and - mutableSetValueForKeyPath: manually triggers the notifications.


not for me it doesn't, see my other reply, without the mutator methods defined in the class, it doesn't preserve the NSMutableArray, it changes it for a new array.


Note none of my mail has been about triggering notifications nor have I been talking about using 'behind the scenes' ways of changing arrays. My mail has been only about how, when you use a correct KVC pattern, a binding or mutableArrayValueForKey: and the property you're mutating happens to actually be an Array, it actually ends up getting mutated when you do, or do not, provide the mutable accessor methods.
Okay, I misunderstood your mail.
Sorry for sending the answer directly …


But:

1. I thought, that it is a "miracle" to him, why only the specified patterns work, but no other.

Not so. The documentation says this

"The key-value coding methods mutableArrayValueForKey: and mutableArrayValueForKeyPath: provide mutable access to a to-many relationship, regardless of the class used to model the relationship. In order to support these methods, your class must implement two additional methods for each of these keys: - insertObject:in<Key>AtIndex: and -removeObjectFrom<Key>AtIndex:."

however in the case of an NSArray property, even if you do not implement them, mutableArrayValueForKey: still provides mutable access to the contents of the array property, albeit by changing the entire property for a brand new array. The specified pattern says I *must* implement those methods for it to work, however it worked even when I didn't, I went to find out why.

No, I think you misunderstood the documentation. It says, that you have to implement this methods to get mutable *access*. Mutable access means in this context, that "mutating accessor mathods" are used. To change the array or build a new array and than sending a setProperty- message to the holding instance is not "mutable access", because semantically *setting* an (old or new) array is no mutation of an existing array.

Hmm, I know, that I speak englisch very badly. Did you understand, what I want to say?



2.1. If -mutableCollectionValueForKey: should work efficient, you have to return a mutable ivar on your accessors (getter). This means, that *everyone* can change items in that collection without triggering kvo. This is the opposition of encapsulation and very, very dangerous.


That I agree with - and my test in the last mail seems to indicate that encapsulation is preserved. I wasn't able to get mutable<anything> to change the array directly. That's good.



Amin Negm-Awad email@hidden



_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


References: 
 >indexed accessor properties and NSArray/NSMutableArray's (From: Roland King <email@hidden>)
 >Re: indexed accessor properties and NSArray/NSMutableArray's (From: Jeff Johnson <email@hidden>)
 >Re: indexed accessor properties and NSArray/NSMutableArray's (From: Negm-Awad Amin <email@hidden>)
 >Re: indexed accessor properties and NSArray/NSMutableArray's (From: Roland King <email@hidden>)

  • Prev by Date: Re: indexed accessor properties and NSArray/NSMutableArray's
  • Next by Date: How is image drawing rate effected by image resolution and size?
  • Previous by thread: Re: indexed accessor properties and NSArray/NSMutableArray's
  • Next by thread: Re: indexed accessor properties and NSArray/NSMutableArray's
  • Index(es):
    • Date
    • Thread