On Mar 9, 2008, at 5:58 AM, Trygve Inda wrote:


On 8 Mar '08, at 1:57 PM, Trygve Inda wrote:

Is this expected? Can I rely on it? I will never need to change
dict, but I
am modifying items within a known sub Dictionary.

Don't rely on this; it's entirely possible this behavior could change
in the future, causing your app to throw an exception. Something much
like that happened in 10.4 (I think) — maybe it was the mutability of
collections read from property lists — and broke a bunch of apps.

—Jens

Is it enough then to take the dictionary I get back and do a [dict
mutableCopy]?

Will this cascade down to the "subdicts" (dicts within the top level dict).


No it won't. mutableCopy only operates on one particular object and not all its contained objects. While that behavior does sound nice in some situations, you'd definitely not want that in all situations.

If you need to make modifications to various objects, make sure they are mutable.

NSDictionary* theImmutableDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSDictionary dictionaryWithObject:
[NSNumber numberWithInt:555] forKey:@"MyNumberOne"], @"MyDictionaryOne",
    [NSDictionary dictionaryWithObject:
[NSNumber numberWithInt:777] forKey:@"MyNumberTwo"], @"MyDictionaryTwo",
    nil];
                                
NSLog (@"theMutableDictionary BEFORE = %@", theImmutableDictionary);

NSDictionary* theMutableDictionary = [theImmutableDictionary mutableCopy];
        
//Legal
[theMutableDictionary setValue:[NSMutableDictionary dictionary]
    forKey:@"MyDictionaryOne"];
        
//Illegal
//[[theMutableDictionary objectForKey:@"MyDictionaryTwo"]
//    setObject:[NSNumber numberWithInt:333] forKey:@"MyNumberTwo"];

//Legal 
NSDictionary* theMutableNestedDictionary =
[[theMutableDictionary objectForKey:@"MyDictionaryTwo"] mutableCopy];
        
[theMutableNestedDictionary setValue:[NSNumber numberWithInt:333]
    forKey:@"MyNumberTwo"];
[theMutableDictionary setValue:theMutableNestedDictionary
    forKey:@"MyDictionaryTwo"];
        
NSLog (@"theMutableDictionary AFTER = %@", theMutableDictionary);

___________________________________________________________
Ricky A. Sharp         mailto:[EMAIL PROTECTED]
Instant Interactive(tm)   http://www.instantinteractive.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to