Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
从cocoa应用程序访问Web服务器_Cocoa_Macos_Osx Leopard - Fatal编程技术网

从cocoa应用程序访问Web服务器

从cocoa应用程序访问Web服务器,cocoa,macos,osx-leopard,Cocoa,Macos,Osx Leopard,我正在编写一个cocoa应用程序,希望从Web服务器下载一个文件。做这件事最方便的方法是什么?我应该使用NSSockets还是NSURL请求?或者有其他更简单的方法来实现这一点吗?最简单的方法可能是将NSURLDownload与NSURLRequest一起使用 如果要将文件内容加载到内存中,许多Cocoa数据类(如NSString、NSData甚至NSDictionary)都有initWithURL:方法,这些方法直接使用web请求的内容进行初始化。它们很容易使用,但它们不是很灵活,也不能提供良

我正在编写一个cocoa应用程序,希望从Web服务器下载一个文件。做这件事最方便的方法是什么?我应该使用NSSockets还是NSURL请求?或者有其他更简单的方法来实现这一点吗?

最简单的方法可能是将NSURLDownload与NSURLRequest一起使用

如果要将文件内容加载到内存中,许多Cocoa数据类(如NSString、NSData甚至NSDictionary)都有
initWithURL:
方法,这些方法直接使用web请求的内容进行初始化。它们很容易使用,但它们不是很灵活,也不能提供良好的错误处理。如果需要,NSURLConnection提供了一种更灵活的加载数据的方法


如果您想将文件直接下载到磁盘,那么NSURLDownload将是最好的选择。

警告一句:initWithURL:方法被阻塞,如果文件太大、服务器太慢、用户的internet连接太慢等等,这是一个大问题。不要从主线程调用它们

您也不会收到任何进度报告,因此当下载速度较慢时,您无法告诉用户下载进度有多远或需要多长时间


在几乎所有情况下,您都应该使用NSURLDownload或NSURLConnection。

另一种方法是使用libcurl,它预装在任何OS X系统上。如果您使用这种方法,最好确保系统设置(如代理等)得到尊重。

如果您希望将数据从web服务获取到NSString或NSData中,NSURLConnection是好的。确保在NSURLConnection方法中进行异步调用并处理错误和数据

下面是一个REST风格调用的好例子

NSURLConnection确实为您提供了最大的粒度,但请小心使用NSURLConnection的sendSynchronousRequest()方法。(我已经连接了XCode泄漏检测工具,并运行它来向我自己证明这一点),偶尔会无缘无故地给出奇怪的HTTP 204响应