Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1059857
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T18:14:14+00:00 2026-05-16T18:14:14+00:00

Is there a way to convert mutable object converted to immutable one in cocoa?

  • 0

Is there a way to convert mutable object converted to immutable one in cocoa?
I have used NSMutableDictionary *mut=[[NSMutableDictionary alloc] initWithDictionary: copyItems:];
But this dictionary is used in many other places without the mutable thing.

Best Regards,
Subrat

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T18:14:15+00:00Added an answer on May 16, 2026 at 6:14 pm

    If I understand your question correctly (given your later comment), you want to convert an immutable copy of an mutable object back to being mutable again.

    The problem seems to be this:

    NSMutableString *foo = [NSMutableString stringWithString:@"a mutable object"];
    
    NSMutableDictionary *dictionary1, *dictionary2;
    
    dictionary1 = [NSMutableDictionary dictionaryWithObject:foo forKey:@"foo"];
    dictionary2 = [[NSMutableDictionary alloc]initWithDictionary:dictionary1
                   copyItems: YES];
    
    [[dictionary1 objectForKey:@"foo"] appendString:@", mutated"];
    [[dictionary2 objectForKey:@"foo"] appendString:@", mutated"];
    

    we can alter the object in dictionary1 just fine, but doing the same to dictionary2 throws an exception.

    This is because although NSMutableDictionary’s initWithDictionary:copyItems: method makes a mutable copy of the dictionary object, it makes immutable copies of its contents.

    Classes that distinguish between immutable and immutable versions (such as cocoa’s basic string, array & dictionary classes) are supposed to implement a copyWithZone: and mutableCopyWithZone: method. Since not all classes implement an mutableCopyWithZone: method, NSMutableDictionary’s initWithDictionary:copyItems: method copies each of dictionary1’s contents immutably, meaning that dictionary2 contains immutable objects.

    You can make an mutable copy of an immutable object by sending it a mutableCopy message. But probably a better solution for you would be to add an initWithDictionary:mutableCopyItems: method to NSMutableDictionary with a category:

    - (id) initWithDictionary:(NSDictionary *)otherDictionary
          mutableCopyItems:(BOOL)flag
    {
     if (flag) {
      self = [self init];
    
      if (self)
       for (id key in otherDictionary){
        id object = [otherDictionary objectForKey:key];
        if ([object respondsToSelector:@selector(mutableCopyWithZone:)])
         [self setObject:[object mutableCopy] forKey:key];
        else
         [self setObject:[object copy] forKey:key];
       }
     }
     else
      self = [self initWithDictionary:otherDictionary];
    
     return self;
    }
    

    Read these if you want to know the difference between copy, mutableCopy, copyWithZone: and mutableCopyWithZone:

    http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Protocols/NSMutableCopying_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSMutableCopying

    http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSCopying

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is there a way to convert (wrap) a mutable Map to immutable in O(1)
Is there any way to convert from DB.Null to decimal in C#? Like Object[]
Is there a way to convert markup string to node object in JavaScript? Actually
Is there a way to convert the GqlQuery object to an array of keys,
Is there a way to convert a List(of Object) to a List(of String) in
Is there a way to convert DateTime object by some pattern to string of
Is there a way to convert twitter bootstrap's typeahead function into a $(body).on() function?
Is there any way to convert a android.graphics.Bitmap instance into jpeg in android?
Is there a way to convert a Java application into a Mac OS X
Is there a way to convert an integer to a string in PHP?

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.