Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLConnection从重定向的URL获取数据_Ios_Objective C_Nsurlconnection_Nsurlconnectiondelegate - Fatal编程技术网

Ios NSURLConnection从重定向的URL获取数据

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

我使用nsurlconction及其委托方法从在线TTSAPI异步获取数据。以下是我尝试加载的URL:

上面的URL重定向,并给我们一个MP3文件,我需要下载。我已使用以下委托方法下载mp3文件:

- (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它给了我对多个请求的很多控制。。。