Воссоздать данные JSON в Objective-C

Я пытаюсь создать приложение на Feedly API. Чтобы пометить категории как прочитанные, мне нужно опубликовать некоторые данные в API. У меня нет успеха, хотя.

Вот что нужно API для ввода:

{
  "lastReadEntryId": "TSxGHgRh4oAiHxRU9TgPrpYvYVBPjipkmUVSHGYCTY0=_1449255d60a:22c3491:9c6d71ab",
  "action": "markAsRead",
  "categoryIds": [
    "user/c805fcbf-3acf-4302-a97e-d82f9d7c897f/category/design",
    "user/c805fcbf-3acf-4302-a97e-d82f9d7c897f/category/photography"
  ],
  "type": "categories"
}

И это мой метод:

- (void)markCategoryAsRead: (NSString*)feedID{

    NSLog(@"Feed ID is: %@", feedID);

    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    NSString *accessToken = [standardUserDefaults objectForKey:@"AccessToken"];

    NSString *feedUrl = [NSURL URLWithString:@"https://sandbox.feedly.com/v3/markers"];

    NSError *error = nil;

    NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys:
                         @"markAsRead", @"action",
                         @"categories", @"type",
                         @[feedID], @"categoryIds",
                         @"1367539068016", @"asOf",
                         nil];
    NSData *postdata = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error];

    NSLog(@"Postdata is: %@", postdata);

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:feedUrl];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
    [request addValue:accessToken forHTTPHeaderField:@"Authorization"];

    //[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];

    NSError *errror = [[NSError alloc] init];
    NSHTTPURLResponse *response = nil;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&errror];

    NSLog(@"Response code: %ld", (long)[response statusCode]);

    if ([response statusCode] >= 200 && [response statusCode] < 300)
    {
        NSLog(@"It's marked as read.");
    } else {
        if (error) NSLog(@"Error: %@", errror);
        NSLog(@"No success marking this as read. %@", response);
    }
}

Это продолжает бросать 400 хотя ошибка, говоря bad input, Что я делаю неправильно?

2 ответа

Вы ничего не делаете с postdata после создания. Прикрепите это к запросу.

[request setHTTPBody:postData];

В вашем коде есть несколько проблем. Вот некоторые, которые я заметил:

  1. Вы не используете postData,
  2. Словарь, который вы делаете в tmp не похоже на словарь, который вы сказали, что хотели отправить. Где lastReadEntryId, например?
  3. NSString *feedUrl должно быть NSURL *feedUrl
  4. Стилистически вы должны использовать буквальный синтаксис словаря для создания словаря. Это облегчит отладку.
Другие вопросы по тегам