Search code examples
iphoneios5nsdictionarysudzc

Deserialize in dictionary produces extra null data


I'm using SUDZC to connect to a web service. The original code kept overwriting values that responded. I modified the code to:

// Deserializes the element in a dictionary.
+(id)deserializeAsDictionary:(CXMLNode*)element {

if([element childCount] == 1) {
    CXMLNode* child = [[element children] objectAtIndex:0];
    if([child kind] == CXMLTextKind)
    {
        // NSLog(@"returnED:%@",[[[element children] objectAtIndex:0] stringValue]);
        return [[[element children] objectAtIndex:0] stringValue];

    }
}

NSMutableDictionary* d = [NSMutableDictionary dictionary];
for(CXMLNode* child in [element children]) {
    id v = [Soap deserialize:child];
    if(v == nil) { v = [NSNull null]; }



    [d setObject:v forKey:[child name]];
    // code added from greg to fix dictionary over writting
    NSString* key = [child name];

    id check = [d objectForKey:key];
    if( check != nil ) {

        NSInteger next = 1;
        key = [NSString stringWithFormat:@"%@%d", [child name], next];
        check = [d objectForKey:key];
        while( check != nil ) {

            next++;
            key = [NSString stringWithFormat:@"%@%d", [child name], next];
            check = [d objectForKey:key];

        }
        [d setObject:v forKey:key];

    }
}

return d;
}

Now, I receive a bunch of null values along with my intended values:

2012-08-02 08:25:22.848 Management[13416:707] TC Keys: {
GetCashiersResult =     {
    diffgram =         {
        NewDataSet =             {
            TC =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
            TC1 =                 {
                "CSHR_NUM" = 999;
                "CSHR_NUM1" = 999;
                "CSHR_POS_NAME" = "Apple Tester";
                "CSHR_POS_NAME1" = "Apple Tester";
            };
            TC2 =                 {
                "CSHR_NUM" = 8;
                "CSHR_NUM1" = 8;
                "CSHR_POS_NAME" = Jonathan;
                "CSHR_POS_NAME1" = Jonathan;
            };
            TC3 =                 {
                "CSHR_NUM" = 54;
                "CSHR_NUM1" = 54;
                "CSHR_POS_NAME" = LEXIE;
                "CSHR_POS_NAME1" = LEXIE;
            };
            TC4 =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
        };
        NewDataSet1 =             {
            TC =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
            TC1 =                 {
                "CSHR_NUM" = 999;
                "CSHR_NUM1" = 999;
                "CSHR_POS_NAME" = "Apple Tester";
                "CSHR_POS_NAME1" = "Apple Tester";
            };
            TC2 =                 {
                "CSHR_NUM" = 8;
                "CSHR_NUM1" = 8;
                "CSHR_POS_NAME" = Jonathan;
                "CSHR_POS_NAME1" = Jonathan;
            };
            TC3 =                 {
                "CSHR_NUM" = 54;
                "CSHR_NUM1" = 54;
                "CSHR_POS_NAME" = LEXIE;
                "CSHR_POS_NAME1" = LEXIE;
            };
            TC4 =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
        };
    };
    diffgram1 =         {
        NewDataSet =             {
            TC =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
            TC1 =                 {
                "CSHR_NUM" = 999;
                "CSHR_NUM1" = 999;
                "CSHR_POS_NAME" = "Apple Tester";
                "CSHR_POS_NAME1" = "Apple Tester";
            };
            TC2 =                 {
                "CSHR_NUM" = 8;
                "CSHR_NUM1" = 8;
                "CSHR_POS_NAME" = Jonathan;
                "CSHR_POS_NAME1" = Jonathan;
            };
            TC3 =                 {
                "CSHR_NUM" = 54;
                "CSHR_NUM1" = 54;
                "CSHR_POS_NAME" = LEXIE;
                "CSHR_POS_NAME1" = LEXIE;
            };
            TC4 =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
        };
        NewDataSet1 =             {
            TC =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
            TC1 =                 {
                "CSHR_NUM" = 999;
                "CSHR_NUM1" = 999;
                "CSHR_POS_NAME" = "Apple Tester";
                "CSHR_POS_NAME1" = "Apple Tester";
            };
            TC2 =                 {
                "CSHR_NUM" = 8;
                "CSHR_NUM1" = 8;
                "CSHR_POS_NAME" = Jonathan;
                "CSHR_POS_NAME1" = Jonathan;
            };
            TC3 =                 {
                "CSHR_NUM" = 54;
                "CSHR_NUM1" = 54;
                "CSHR_POS_NAME" = LEXIE;
                "CSHR_POS_NAME1" = LEXIE;
            };
            TC4 =                 {
                "CSHR_NUM" = 7;
                "CSHR_NUM1" = 7;
                "CSHR_POS_NAME" = Randy;
                "CSHR_POS_NAME1" = Randy;
            };
        };
    };
    schema =         {
        element =             {
            complexType =                 {
                choice =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                    element1 =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                };
                choice1 =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                    element1 =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                };
            };
            complexType1 =                 {
                choice =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                    element1 =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                };
                choice1 =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                    element1 =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                };
            };
        };
        element1 =             {
            complexType =                 {
                choice =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                    element1 =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                };
                choice1 =                     {
                    element =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };

                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                    element1 =                         {
                        complexType =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                        complexType1 =                             {
                            sequence =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                            sequence1 =                                 {
                                element = 0;
                                element1 = "<null>";
                                element2 = 0;
                            };
                        };
                    };
                };
            };
        };
    };

I can't stop it from pulling the data multiple times, and pulling all the ? Shouldn't the code stop when the child is not 1?


Solution

  • Elements must be placed above the call [d setObject:v forKey:[child name]]; and else has to be added so the d will not be overwritten.

    if( check != nil ) {              
    NSInteger next = 1;              
    key = [NSString stringWithFormat:@"%@%04d", [child name], next]; 
    check = [d objectForKey:key];  
    while( check != nil ) {                  
        next++;  
        key = [NSString stringWithFormat:@"%@%04d", [child name], next];  
        check = [d objectForKey:key];  
    }  
    [d setObject:v forKey:key];  
    } else { 
    [d setObject:v forKey:[child name]]; 
    } 
    

    Otherwise elements in 'd' will be overwritten because setObject is called twice.