NSMutableDictionary-(void) setObject :( id) for :( NSstring *) key when the id is nil, crash will appear. However, when setValue is used, nothing happens. Currently, Dic uses setValue instead of setObject to construct MutableDictionary. There is no major problem example: NSMutableDictionary * dic1 = [NSMutableDictionary dictionaryWithCapacity: 1]; [dic1 setObject: @ "1" forKey: @ "1"]; [dic1 setObject: @ "2" forKey: @ "2"]; [dic1 setObject: @ "" forKey: @ "3"]; [dic1 setObject: @ "4" forKey: @ "4"]; // [dic setObject: nil forKey: @ "41"]; wrong [dic1 setValue: nil forKey: @ "5"]; [dic1 setValue: @ "6" forKey: @ "6"]; [dic1 setValue: [NSDate date] forKey: @ "date"]; [dic1 setValue: [NSString string] forKey: @ "nil string"]; [dic1 setValue: [NSDictionary dictionaryWithObject: [[UIView alloc] init] forKey: @ "View"] forKey: @ "complex non-String"]; 14:36:42. 089 GuessMovies [5924: c07] {1 = 1; 2 = 2; 3 = ""; 4 = 4; 6 = 6; date = "06:35:56 + 0000 "; "nil string" = ""; "\ U590d \ U6742 \ U975eString" = {View = "<UIView: 0xa421a10; frame = (0 0; 0 0 ); layer = <CALayer: 0xa24be80> ";};}