title: NSInternalInconsistencyException with NSUserDefaults when using method setValue: forPath
body: <p>My code is as follows:</p>
  
  <pre><code>NSMutableDictionary *configure = [[NSUserDefaults standardUserDefaults] objectForKey:@"configure"];
  if (!configure){    
  configure = [NSMutableDictionary dictionary];
  [configure setValue:[NSMutableDictionary dictionary] forKeyPath:@"select"] ;
  
  [configure setValue:[NSMutableDictionary dictionary] forKeyPath:@"select.around"];
  [configure setValue: @"All" forKeyPath:@"select.around.name"];
  
  [[NSUserDefaults standardUserDefaults] setObject:configure forKey:@"configure"];
  [[NSUserDefaults standardUserDefaults] synchronize];
      }
  NSString *keyPath = @"configure.select.around";
  NSMutableDictionary *aroundConfigure = [[[NSUserDefaults standardUserDefaults] valueForKeyPath:keyPath] mutableCopy];
  [aroundConfigure setObject:@"" forKey:@"name"];
  [[NSUserDefaults standardUserDefaults] setValue:aroundConfigure forKeyPath:keyPath];
  </code></pre>
  
  <p>It's crashing every time with the error below:</p>
  
  <pre><code>** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
  *** Call stack at first throw:
  (
      0   CoreFoundation                      0x00daebe9 __exceptionPreprocess + 185
      1   libobjc.A.dylib                     0x00f035c2 objc_exception_throw + 47
      2   CoreFoundation                      0x00d67628 +[NSException raise:format:arguments:] + 136
      3   CoreFoundation                      0x00d6759a +[NSException raise:format:] + 58
      4   CoreFoundation                      0x00dad401 -[__NSCFDictionary setObject:forKey:] + 209
      5   Foundation                          0x0004b34d -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 399
      6   Foundation                          0x0004b34d -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 399
      7   Untitled                            0x00002429 -[UntitledAppDelegate application:didFinishLaunchingWithOptions:] + 774
      8   UIKit                               0x002b81fa -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
      9   UIKit                               0x002ba55e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439
      10  UIKit                               0x002c4db2 -[UIApplication handleEvent:withNewEvent:] + 1533
      11  UIKit                               0x002bd202 -[UIApplication sendEvent:] + 71
      12  UIKit                               0x002c2732 _UIApplicationHandleEvent + 7576
      13  GraphicsServices                    0x016e4a36 PurpleEventCallback + 1550
      14  CoreFoundation                      0x00d90064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
      15  CoreFoundation                      0x00cf06f7 __CFRunLoopDoSource1 + 215
      16  CoreFoundation                      0x00ced983 __CFRunLoopRun + 979
      17  CoreFoundation                      0x00ced240 CFRunLoopRunSpecific + 208
      18  CoreFoundation                      0x00ced161 CFRunLoopRunInMode + 97
      19  UIKit                               0x002b9fa8 -[UIApplication _run] + 636
      20  UIKit                               0x002c642e UIApplicationMain + 1160
      21  Untitled                            0x00002100 main + 102
      22  Untitled                            0x00002091 start + 53
  )
  terminate called after throwing an instance of 'NSException'
  </code></pre>
  
  <hr>
  
  <p>I know that <code>setObject:forKey:</code> should used with a mutable dictonary . Is there any problem using KVO with NSUserDefaults? By the way, the platform I use is iPhone.</p>