Ios NSURLConnection从重定向的URL获取数据
我使用nsurlconction及其委托方法从在线TTSAPI异步获取数据。以下是我尝试加载的URL: 上面的URL重定向,并给我们一个MP3文件,我需要下载。我已使用以下委托方法下载mp3文件:Ios NSURLConnection从重定向的URL获取数据,ios,objective-c,nsurlconnection,nsurlconnectiondelegate,Ios,Objective C,Nsurlconnection,Nsurlconnectiondelegate,我使用nsurlconction及其委托方法从在线TTSAPI异步获取数据。以下是我尝试加载的URL: 上面的URL重定向,并给我们一个MP3文件,我需要下载。我已使用以下委托方法下载mp3文件: - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { if (connection == connectionToTTSAPI) { mp3Manager = [NS
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (connection == connectionToTTSAPI) {
mp3Manager = [NSFileManager defaultManager];
localPath = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"hello.mp3"];
mp3Handler = [NSFileHandle fileHandleForWritingAtPath:localPath];
if (!mp3Handler) {
[[NSFileManager defaultManager] createFileAtPath:localPath contents:nil attributes:nil];
mp3Handler = [NSFileHandle fileHandleForWritingAtPath:localPath];
}
@try {
[mp3Handler seekToEndOfFile];
[mp3Handler writeData:data];
}
}
}
由于我在程序中使用的NSURLConnection不止一个,因此我设置了一个if条件来识别响应是针对哪个连接的。但是我没有得到mp3文件,所以我在委托方法中设置了一个断点,发现与ttsapi的连接从未得到响应。我认为这是因为重定向。当我讨论其他一些问题时,我已经看到了以下方法的使用,但是我在nsurlconnectionelegate
中没有找到这样的函数,而且作为NSURLConnection的初学者,我不知道如何使用该方法来处理重定向。没有一个结果让我清楚地知道如何使用它
- (NSURLRequest *)connection: (NSURLConnection *)inConnection
willSendRequest: (NSURLRequest *)inRequest
redirectResponse: (NSURLResponse *)inRedirectResponse;
对于iOS,该委托方法在
NSURLConnectionDataDelegate
中定义,使您有机会控制重定向的处理方式(您可以取消、更改或原封不动地返回重定向)
在您的情况下,您希望让它请求重定向响应返回的URL,因此一个简单的实现是:
- (NSURLRequest *)connection: (NSURLConnection *)inConnection
willSendRequest: (NSURLRequest *)inRequest
redirectResponse: (NSURLResponse *)inRedirectResponse {
return inRequest;
}
但我认为这应该是默认行为,因此如果请求未被处理,则问题可能在其他地方…抱歉,您没有收到。。在何处返回此信息?您对您提到的NSURLConnectionLegate方法的实现。。。我将更新答案。不,实际上我没有在NSURLConnection委托中找到方法
-(NSURLRequest*)连接:(NSURLConnection*)中的方法willSendRequest:(NSURLRequest*)中的方法redirectResponse:(NSURLResponse*)中的方法。该方法在哪个委托中声明?它在OSX的nsurlConnectionLegate
中-您是在编写OSX还是在编写iOS?:-)好的,修好了。。看起来好像是Xcode自动填充有问题,好吧,如果我返回请求,它将返回到哪里?我如何调用-(void)连接:(NSURLConnection*)连接didReceiveData:(NSData*)数据代码>使用重定向URL的方法?看起来很可疑…你是如何处理响应的?。还有多少“如果”条件?如果是“如果”条件让你困惑,我使用它,因为我使用了多个NSURLConnections。每当出现多个请求/下载时,我总是使用AFNetworking()。bcz它给了我对多个请求的很多控制。。。