ios85
ios85

Reputation: 2134

Adding objects from array to dictionary

I am getting rows from a SQLite DB and trying to insert them into a dictionary. Except I keep getting errors! I get the error "Implicit conversion of an Objective-C pointer to 'const id *' is disallowed with ARC" Which I know means that I cant use a pointer when I am adding objects to my dictionary. So how do I go about fixing it so I can add those arrays to a dictionary?

    NSArray *keyArray = [[NSMutableArray alloc] init ];
    NSArray *valueArray = [[NSMutableArray alloc ] init ];
    NSDictionary* dic;
    NSInteger dataCount = sqlite3_data_count(statement);
    while (sqlite3_step(statement) == SQLITE_ROW) {
        @try {
            for (int i = 0; i < dataCount; i ++)
            {
                NSString* key = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)];  
                NSString *value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)];

                if ([value length] == 0)
                {
                    value = @"";
                }

                keyArray = [keyArray arrayByAddingObject:key];
                valueArray = [valueArray arrayByAddingObject:value];

            }

        }
        @catch (NSException *ex)
        {
            NSLog(@"%@,%@", [ex name], [ex reason]);
        }

        dic= [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray count:[keyArray count]];

Upvotes: 0

Views: 2337

Answers (2)

Amol Badgujar
Amol Badgujar

Reputation: 11

[dicBodyPost setValue:arrContactAddress forKey:@"contactAddress"];

Upvotes: 0

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726499

The dictionaryWithObjects:forKeys:count: takes C-style arrays, not NSArray objects. The dictionaryWithObjects:forKeys: may do the trick, but you may be better off constructing a mutable dictionary as you go, bypassing NSArrays entirely.

NSDictionary* dic;
NSMutableDictionary *tmp = [NSMutableDictionary dictionary];

for (int i = 0; i < dataCount; i ++)
{
    NSString* key = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)];  
    NSString *value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, i)];
    [tmp setObject:value forKey:key];
}
dict = tmp;

Upvotes: 5

Related Questions