0

我正在尝试将文件从服务器下载到这样的 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 编写的。

非常感谢任何想法或建议

4

2 回答 2

1

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

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

于 2012-05-21T19:35:04.427 回答
0

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

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

希望这会帮助你

于 2012-05-21T20:25:16.023 回答