Objective c CSV未显示在responseObject中

Objective c CSV未显示在responseObject中,objective-c,ruby-on-rails,csv,curl,afnetworking-2,Objective C,Ruby On Rails,Csv,Curl,Afnetworking 2,Rails服务器: #via a POST respond_to do |format| format.pdf { send_data ScheduleMachineReconciliationReport.to_pdf(@schedule_machine), type: "application/pdf", disposition: "inline" } format.csv { send_data ScheduleMachineReconciliationR

Rails服务器:

#via a POST

respond_to do |format|
        format.pdf { send_data ScheduleMachineReconciliationReport.to_pdf(@schedule_machine), type: "application/pdf", disposition: "inline" }
        format.csv { send_data ScheduleMachineReconciliationReport.to_csv(@schedule_machine), type: "application/csv" }
      end
ScheduleMachineRecliationReport.rb

  def to_csv
    csv_generation = CSV.generate do |csv|
      csv << column_header_titles
      products.each do |p|
        csv << write_product_array(p)
      end
    end

    puts "csv generation: " + csv_generation
    csv_generation
  end

def self.to_csv(schedule_machine)
    new(schedule_machine).to_csv
  end
Objective-C解析:

  [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

>>breakpoint        [SVProgressHUD showSuccessWithStatus:@""];

po operation.responseString > nil
po responseObject > nil
编辑:


卷发确实会在命令行中返回响应。

我不确定这是否可以解决您的问题,但在上说您必须使用Mime类型
text/csv
,而不是
application/csv


我假设您的服务器日志显示了您所期望的内容(1条记录及其列标题)。

我没有重现问题。我设置了一个Ruby on Rails应用程序,它只响应:

Column,Products,Previous QTY,New QTY,QTY Sold,Slot Price,Expected Sales 9,Coke,0,0,0,3.00,0.00 我看到成功块被执行,
responseObject
不是nil,
operation.responseString
是CSV字符串


您使用的responseSerializer可能有问题。

内容类型也可以是
应用程序/x-csv
<代码>文本/x-csv<代码>应用程序/csv<代码>文本/csv

因此,您需要将它们全部添加:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/x-csv", @"text/x-csv", @"application/csv", @"text/csv", nil];
[manager GET:@"http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"CSV:\n%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error:\n%@", error.localizedDescription);
}];

如果在命令行上使用curl或例如使用Postman执行相同的HTTP调用,是否会显示响应?是的,当我使用curl时会显示响应。我很困惑,您是否从
@schedule\u machine
中的数据生成csv文件?ScheduleMachineReconciliationReport.rb中的
to_csv
方法没有任何参数?@KenStipek包含完整的初始化代码这看起来不错。但我没有AFHTTPResponseSerializer。我想那是在以后的版本中。我将要更新AFNetworking,但立即更新会破坏与RestKit的兼容性。所以我来看看曼特尔。。
NSURL *URL = [NSURL URLWithString:@"http://localhost:3000/test?format=csv"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
AFHTTPResponseSerializer *responseSerializer = [[AFHTTPResponseSerializer alloc] init];
responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/csv", @"text/csv", nil];
operation.responseSerializer = responseSerializer;
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"success");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"failure");
}];
[[NSOperationQueue mainQueue] addOperation:operation];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/x-csv", @"text/x-csv", @"application/csv", @"text/csv", nil];
[manager GET:@"http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"CSV:\n%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error:\n%@", error.localizedDescription);
}];