2015-01-14 5 views
0

Я пытаюсь создать приложение на API-интерфейсе. Чтобы иметь возможность отмечать категории как прочитанные, мне нужно отправить некоторые данные в API. Я не добился успеха.Восстановить данные JSON в Objective-C

Это то, что нужно 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. Что я делаю не так?

ответ

1

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

[request setHTTPBody:postData]; 
+0

Я такой тупик. Должно быть, он случайно удалил его. – user4334509

+0

не беспокойтесь, я сделал то же самое сам много раз – Nick

0

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

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