Массив постов в сети

Я пытаюсь опубликовать массив в качестве сообщения вместо словаря. Однако я получаю сообщение об ошибке:

Incompatible pointer types sending NSMutableArray to parameter of type NSDictionary

Вот код

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSMutableArray *parameters = @[@"foo", @"bar"];
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

Как я могу опубликовать ТОЛЬКО содержимое массивов?

Обновлять:

Этот код работает, но я бы предпочел, чтобы ответ ниже работал, поскольку он чище, а af обрабатывает сериализацию. Я предполагаю, что тело запроса отличается, но как я узнаю, что это за тело?

  NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:&error];
    NSString *body = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/resources.json"]
                                                           cachePolicy:NSURLRequestReloadIgnoringCacheData  timeoutInterval:10];
    
    [request setHTTPMethod:@"POST"];
    [request setValue: @"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody: [body dataUsingEncoding:NSUTF8StringEncoding]];
    
    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    op.responseSerializer = [AFJSONResponseSerializer serializer];
    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        NSLog(@"JSON responseObject: %@ ",responseObject);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", [error localizedDescription]);
        
    }];
    [op start];

person Todd Horst    schedule 17.02.2014    source источник
comment
Я не уверен, как вы хотите, чтобы это работало. foo и bar необходимо присвоить переменной   -  person Bot    schedule 18.02.2014


Ответы (1)


Я предполагаю, что вы хотите, чтобы foo и bar были вашими параметрами без каких-либо значений? если это так, вы захотите сделать что-то вроде этого

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSMutableArray *parameters = @[@"foo", @"bar"];
NSDictionary *params = [[NSDictionary alloc] initWithObjects:@[[NSNull null], [NSNull null]] forKeys:parameters];
[manager POST:@"http://example.com/resources.json" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

ИЗМЕНИТЬ Попробуйте добавить

manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
person Bot    schedule 17.02.2014
comment
Это близко. Я могу успешно завершить запрос. Но тело пустое. Я считаю, что это потому, что тело запроса отличается от того, что должно быть. Я обновил свой вопрос менее элегантным решением. Подскажите, как посмотреть тело запроса? - person Todd Horst; 18.02.2014
comment
Мне пришлось добавить requestserializer, чтобы заставить его работать изначально. Я установил ответ, но сделал это неправильно (установил его на afhttpresponse), даже с исправлением того, что `NSLog(@%@,operation.responseString);` все еще возвращается с пустым массивом. Когда он действительно успешен, это заполненный массив. - person Todd Horst; 18.02.2014