Как вызвать метод JSON в iOS - PullRequest
       2

Как вызвать метод JSON в iOS

2 голосов
/ 02 февраля 2011

Есть вызов JSON, который, когда я звоню через curl, как показано ниже:

завиток -H "Content-Type: application / json" -H "Принять: приложение / JSON" -D "{\" checkin \ ": {\" message \ ": \" это тестовое задание\"}}" http://gentle -rain-302.heroku.com / checkins.json

Я получаю этот результат:

{ "Checkin": { "created_at": "2011-01-29T13: 52: 49Z", "идентификатор": 3, "сообщение": "это это тест», "updated_at": "2011-01-29T13: 52: 49Z"}}

Но когда я звоню в своем приложении для iPhone, как показано ниже:

- (void)doCheckIn:(NSString *)Str
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"inStore-settings.plist"];
    NSDictionary *plistDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

    NSString *appURL = [plistDictionary objectForKey:@"apiurl"];
    appURL = [appURL stringByAppendingString:@"checkins.json"];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:appURL]];
    [request setPostValue:@"{\"checkin\":{\"message\":\"test\"}}" forKey:@"message"];
    [request startSynchronous];
    NSError *error = [request error];
    if (!error) {
        NSString *response = [request responseString];
        NSLog(response);
    }
}

Я получаю результат:

"Требуемое изменение было отклонено (422) "* +1022 *

Любая помощь высоко ценится.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Глядя на вашу команду curl, я не думаю, что вы хотите делать http multipart post, который специально настроен для обработки ASIFormDataRequest.Вы просто хотите установить тело сообщения для вашей строки json.Попробуйте использовать обычный класс ASIHTTPRequest и добавить данные в тело сообщения с помощью метода, подобного appendPostData: или подобного.Это должно создать соответствующий HTTP-запрос для вас.

1 голос
/ 02 февраля 2011

Этот кусок кода работал:

- (void)doCheckIn:(NSString *)Str
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"inStore-settings.plist"];
    NSDictionary *plistDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

    NSString *appURL = [plistDictionary objectForKey:@"apiurl"];
    appURL = [appURL stringByAppendingString:@"checkins.json"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:appURL]];
    [request appendPostData:[@"{\"checkin\":{\"message\":\"test by Zuzar\"}}" dataUsingEncoding:NSUTF8StringEncoding]];
    [request addRequestHeader:@"Content-Type" value:@"application/json"];
    [request addRequestHeader:@"Accept" value:@"application/json"];
    [request setRequestMethod:@"POST"];
    [request startSynchronous];
    NSError *error = [request error];
    if (!error) {
        NSString *response = [request responseString];
        NSLog(@"%@", response);
    }

}
0 голосов
/ 02 февраля 2011

Вы пытались установить заголовки Accept и Content-Type в своем экземпляре ASIFormDataRequest?

...