iOS) Как установить параметр при получении ответа с помощью AFHTTPRequestOperation с методом «GET»

Мой код ниже:

NSString *urlString = [[NSString stringWithFormat:@"/players?skip=%ld",(long)skipSize] DVURL];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//[request set]
[request setValuesForKeysWithDictionary:[filter filteringDictionary]];
AFHTTPRequestOperation *operation =
[[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:
 ^(AFHTTPRequestOperation *operation, id responseObject) {
     NSLog(@"responseObject %@", responseObject);

     totalPages = ([[responseObject
                     objectForKey:@"count"] intValue] / 20);
     NSLog(@"%@",[responseObject objectForKey:@"players"]);
     for (NSDictionary *playerDict in [responseObject objectForKey:@"players"]) {
         DVPlayer *player = [[DVPlayer alloc] initWithDictionary:playerDict];
         if (![self.playerArray.players containsObject:player]) {
             [self.playerArray.players addObject:player];
         }
     }
     [playerCollectionView reloadData];

 } failure:
 ^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"Error: %@", [error localizedDescription]);
     [[[UIAlertView alloc]
        initWithTitle:@"Error fetching players!"
        message:@"Please try again later"
        delegate:nil
        cancelButtonTitle:@"OK"
        otherButtonTitles:nil] show];
 }];

[operation start];

Когда я использую AFHTTPRequestOperationManager, я использовал NSDictionary в качестве параметра для метода GET.

Поэтому я подумал, что [request setValuesForKeysWithDictionary:[filter filteringDictionary]]; будет соответствовать.

Но я получил ошибку:

setValue: forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для имени (ex)

Я разработал параметр NSDictionary для удобства... Могу ли я установить параметр как NSDictionary при использовании AFHTTPRequestOperation , а не AFHTTPRequestOperationManager?

Помоги мне, пожалуйста


person Community    schedule 30.08.2015    source источник


Ответы (1)


AFHTTPRequestOperation принимает NSURLRequest в качестве параметра инициализации. Таким образом, вам нужно самостоятельно обработать сериализацию, добавить ее к своему URL-адресу, а затем закодировать URL-адрес:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[yourUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];

Еще одна причина, почему AFHTTPRequestOperationManager проще ;)

person brandonscript    schedule 30.08.2015