【问题标题】:NSURLConnection receives 'False' on file downloadNSURLConnection 在文件下载时收到“假”
【发布时间】:2012-05-22 04:25:16
【问题描述】:

我正在尝试将文件从服务器下载到这样的 iphone

NSURL *newURL0 = [NSURL URLWithString: url]; 
NSMutableURLRequest *req0 = [NSMutableURLRequest requestWithURL:newURL0];
NSURLConnection conn = [[NSURLConnection alloc] initWithRequest:req0 delegate:self];

然后

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSURL *docDirectory = [[[NSFileManager defaultManager] URLsForDirectory:
                            NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

    NSURL *filePath = [docDirectory URLByAppendingPathComponent:temp];

    [webData writeToURL:filePath atomically:YES];
    [webData release];

    connection = nil ; 

    if ([delegate respondsToSelector:@selector(getDataSucceeded:)]) {

        NSLog(@"Log: %@", @"yes");
        [delegate getDataSucceeded:self.list];
    }
}

这总是很有效,但最近我注意到它不再有效了。没有对与此功能相关的任何文件进行任何更改,它只是停止了工作。当我在网络浏览器中使用相同的 url 时,文件下载正常,但在我的应用程序中,当我请求文件时,它只返回 5 个字节,我也觉得很奇怪,因为服务器没有返回 False 这个词,如果有问题,它会返回一条错误消息。服务器端代码是用 Visual Basic 编写的。

非常感谢任何想法或建议

【问题讨论】:

    标签: iphone objective-c ios nsurlconnection


    【解决方案1】:

    False 在 Visual Basic 中是关键字,在 Objective-C 中不是关键字。也没有理由在这样的响应中显示为文本。它几乎肯定是在服务器端生成的。

    使用诸如 Charles 之类的 HTTP 代理来查看您的网络浏览器和您的应用程序发出了哪些请求。它们之间会有差异,导致服务器以不同的方式响应。使用 cURL 之类的工具手动发出请求,以确定哪些差异是原因。或者,检查服务器端代码的提交日志以了解可能导致此问题的最新更改。

    【讨论】:

      【解决方案2】:

      我认为您错过了以下回调函数,您需要将数据块附加到单个 NSData 对象中: 在我的情况下 _responseText 是一个 NSData 对象

      - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        [_responseText appendData:data];
      }
      

      希望对你有所帮助

      【讨论】:

        猜你喜欢
        • 2011-09-07
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 2015-11-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        相关资源
        最近更新 更多