Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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
Iphone 多个NSURL连接同时运行_Iphone_Ios - Fatal编程技术网

Iphone 多个NSURL连接同时运行

Iphone 多个NSURL连接同时运行,iphone,ios,Iphone,Ios,在我的应用程序中,有一个函数可以通过HTTP URLConnection下载文件,并将收到的数据写入和附加到文件中。这是一些需要几分钟才能完成下载的音乐文件。在下载过程中,用户可能需要从服务器请求一些其他JSON数据 问题是,我遇到的是请求被延迟,直到第一次连接(下载音乐文件)完成。这两个对象被分成两个不同的对象,并由不同的类调用 我也尝试用NSThread启动它们 [NSThread detachNewThreadSelector: @selector(threadDownload) toTa

在我的应用程序中,有一个函数可以通过HTTP URLConnection下载文件,并将收到的数据写入和附加到文件中。这是一些需要几分钟才能完成下载的音乐文件。在下载过程中,用户可能需要从服务器请求一些其他JSON数据

问题是,我遇到的是请求被延迟,直到第一次连接(下载音乐文件)完成。这两个对象被分成两个不同的对象,并由不同的类调用

我也尝试用NSThread启动它们

[NSThread detachNewThreadSelector: @selector(threadDownload) toTarget: self withObject: nil ];
但是,第二个请求仍在等待第一个请求完成,由于下载时间过长,第二个请求超时并出错


希望您能就如何克服这一问题发表意见

最好的方法是使用AsitpRequest。它很容易集成,可以为您处理所有并发的后台内容


以下是url:

您可以尝试这个名为:,它可以做很多事情的库(几分钟前我刚刚发布了一些问题的相同答案)。您可以有多个请求(异步),这应该可以解决您的问题。它很容易使用。

老实说,我不理解您的抱怨,因为默认情况下,NSURLConnection是异步的,除非您显式使用sendSynchronousRequest:returningResponse:error:
对于“正常使用”,即:使用initWithRequest:delegate:初始化,然后调用start,该类将在后台线程中处理所有进程,并返回主线程仅调用指定的委托。

使用GCD,这非常简单,所有线程都是透明完成的

例如:

__block NSMutableArray *imageURLList = [NSMutableArray array];

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

for (Helper *siteURL in list) {
    dispatch_async(queue, ^{
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:siteURL]];
        NSURLResponse *response;
        NSError *error;
        NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        if (urlData.length)
            [imageURLList urlData];
    });
}
请注意,块是异步执行的,因此可以使用
sendSynchronousRequest:


如果循环不适用于您,只需发出单独的请求。

您能否指导我在下载数据期间应如何执行某些操作?我需要将数据写入一个文件,同时,AVAudioPlayer将在下载完成之前读取并播放数据。我只看到“(void)requestFinished:(ASIHTTPRequest*)request“delegate”仅供使用,而不是类似“didreceivedata”的内容?您能否指导我在下载数据期间如何执行一些操作?我需要将数据写入一个文件,同时,AVAudioPlayer将在下载完成之前读取并播放数据。我只看到“(void)requestFinished:(ASIHTTPRequest*)request“委托”只供使用,而不是像“didreceivedata”这样的东西?我是按照您建议的方式完成的,但不是在循环中完成的。每个块从其自己的视图控制器调用相同的ispatch\u queue\u t queue=dispatch\u get\u global\u queue(,并在其中执行。但第二个NSURL连接似乎仍在等待第一个连接完成。