Использование ASIHTTPRequest для размещения вложенных параметров с помощью NSDictionary - PullRequest
5 голосов
/ 05 ноября 2011

Попытка опубликовать информацию для вложенных параметров в приложении rails и возникли некоторые проблемы.

#pragma mark - Begin Network Operations
- (void)beginNetworkOperation {
    NSURL *requestURL = [NSURL URLWithString:[self retrieveURL]];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:requestURL];

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
    [request setShouldContinueWhenAppEntersBackground:YES];
#endif

    [request setRequestMethod:@"PUT"];

    [request addRequestHeader:@"Content-Type" value:@"application/json"];

    [request addPostValue:strClientId forKey:@"client_id"];
    [request addPostValue:strAccessToken forKey:@"access_token"];

    NSDictionary *assetDictionary = [NSDictionary dictionaryWithObject:self.tags forKey:@"tags"];
    [request addPostValue:assetDictionary forKey:@"asset"];

    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestFinished:)];
    [request setDidFailSelector:@selector(requestFailed:)];
    [request startSynchronous];
}

self.tags - это просто NSString со значениями, разделенными запятыми, однако однажды поступив на сервер rails, параметр tagsне может быть прочитано (params [: asset] [: tags]).

Ответы [ 2 ]

2 голосов
/ 05 июля 2012

Вот фрагмент рабочего кода с JSONKit на iOS.

[request addRequestHeader:@"Content-Type" value:@"application/json"];

NSMutableDictionary *requestDict = [[NSMutableDictionary alloc] init];
[requestDict setObject:@"iSteve" forKey:@"UserId"];
[requestDict setObject:@"1" forKey:@"CompanyCode"];
[requestDict setObject:@"IN" forKey:@"LineOfBusiness"];
[requestDict setObject:@"M" forKey:@"LineOfBusinessClassification"];
[requestDict setObject:pricingVariablesListString forKey:@"CarQuoteString"];
[request appendPostData:[requestDict JSONData]];
2 голосов
/ 05 ноября 2011

Попробуйте передать словарь как строку JSON, а не как объект словаря.

Это можно сделать с помощью библиотеки JSON для iOS5 или для большей совместимости:

https://github.com/stig/json-framework

Я использую appendPostData, потому что я почти уверен, что установка заголовка (addRequestHeader) и использование addPostValue не являются совместимыми функциями.Вот пример моего кода:

ASIFormDataRequest *request;
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request appendPostData:[[SBJsonWriter new] dataWithObject:myDictionaryToPassAsAnArgument]];

Когда вы используете appendPostData, вы не можете использовать addPostValue.Вы должны положить все в словаре.

...