Objective C + Reskit — Как обернуть словарь ключом, чтобы избежать проблем с форматированием?

Я пытаюсь обернуть свой запрос HTTP POST ключом. Другими словами, я хочу превратить это:

{
"category_id"=>"1", 
"food_name_token"=>"Pizza", 
 "id"=>"1"
}

в это:

{
"dish" => 
    {
    "category_id"=>"1", 
    "food_name_token"=>"Pizza", 
    "id"=>"1"
    }
}

Я попытался использовать метод rootKeyPath в RestKit:

serializationMapping.rootKeyPath = @"dish";    

Но это дало мне эту странно отформатированную строку:

{
"dish"=>
    "{
    \n \"category_id\" = 1; 
    \n \"food_name_token\" = Pizza;
    \n id = 1;
    \n}
"}

Он использует знаки равенства и точки с запятой вместо стрелок и запятых, а также добавляет все эти разрывы строк и обратную косую черту.

Есть идеи, почему? И любые предложения о том, что я могу сделать вместо этого?

P.S. Я использую бэкэнд Rails


person Jonathan Chiu    schedule 22.11.2011    source источник
comment
stackoverflow .com/questions/7521683/   -  person SVD    schedule 22.11.2011


Ответы (3)


NSDictionary *rootDictionary = [NSDictionary dictionaryWithObject:childDict forKey:@"dish"];

Это должно решить эту проблему.

person Alex Zielenski    schedule 22.11.2011
comment
и как Джонатан получает childDict? - person Michael Dautermann; 22.11.2011
comment
Ваш ответ заставил меня понять, что проблема не в методе «rootKeyPath» RestKit, потому что я попробовал ваше решение, и оно дало тот же результат. Вместо этого проблема заключается в том, как Objective C сериализует мой объект Dictionary. Даже если он упакован правильно, он все равно дает мне эти дополнительные экранированные строки, которые затрудняют анализ сервера. Он не полностью отвечает на мой вопрос, но отвечает на вопрос, который я поставил в качестве своего заголовка (хотя я понял, что это неправильный вопрос, поэтому мне, вероятно, следует его изменить). Так что я просто дам вам голос. - person Jonathan Chiu; 23.11.2011

Я узнал, что с помощью Restkit я могу оборачивать атрибуты с помощью скобок:

    [dishMapping mayKeyPath:@"dish[food_name_token]" toAttribute:@"placeToken"];

И это дает мне нормальный вывод без странного форматирования.

person Jonathan Chiu    schedule 25.11.2011
comment
Этот ответ спасает жизнь. Спасибо! - person Schrockwell; 27.04.2012

Добавьте элементы в NSArray, а затем добавьте массив в NSDictionary, например:

NSDictionary *item = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray arrayWithObject:results], @"Parent",nil];
NSLog(@"NSDicitonary %@",item);
NSLog(@"Child values %@",[item valueForKey:@"Parent"]);
person Khalil Ghaus    schedule 22.11.2011
comment
Я также читал об использовании массивов по этой ссылке: stackoverflow.com/questions/7521683/ Но я не понимаю, как реализовать это по-своему. - person Jonathan Chiu; 23.11.2011