Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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 在后台上传带有NSURLSession的照片_Ios_Objective C_Swift - Fatal编程技术网

Ios 在后台上传带有NSURLSession的照片

Ios 在后台上传带有NSURLSession的照片,ios,objective-c,swift,Ios,Objective C,Swift,我想使用NSURLSession将照片上传到云服务器(比如OneDrive),我希望该应用程序可以在后台工作 但是nsursession只支持后台模式下的“fromFile”而不是“fromData”,我不知道如何获取照片的NSURL,所以我将照片的数据写入一个文件 我认为这不是一个好方法。从上面的评论来看,似乎您将一次上载多张照片,因此,“fromData”方法似乎不是一个好主意 首先,高分辨率照片的大小有几兆字节。如果您使用NSData将5mb照片加载到内存中,您可能就没事了。但是加载10张

我想使用
NSURLSession
将照片上传到云服务器(比如OneDrive),我希望该应用程序可以在后台工作

但是
nsursession
只支持后台模式下的“fromFile”而不是“fromData”,我不知道如何获取照片的
NSURL
,所以我将照片的数据写入一个文件


我认为这不是一个好方法。

从上面的评论来看,似乎您将一次上载多张照片,因此,“fromData”方法似乎不是一个好主意

首先,高分辨率照片的大小有几兆字节。如果您使用
NSData
将5mb照片加载到内存中,您可能就没事了。但是加载10张照片意味着你需要50mb的内存来保存它们

其次,上传大量数据(如照片)也是一项计算密集型任务。你绝对不应该试图同时上传它们。这意味着您必须构建一个上传队列,只有在最后一张照片完成后才开始上传下一张照片。如果互联网连接在过程中途丢失,会发生什么情况?如果用户突然关闭应用程序会发生什么

因此,我建议您抓取所有图像的数据并将其写入某个临时文件夹中。然后开始上传过程,在临时文件夹中找到一个文件,上传它,上传成功后删除它,然后重新开始下一个文件


通过这种方式,您可以最大限度地减少应用程序的内存占用,使其在面对应用程序可能面临的诸多逆境(没有互联网连接、被用户过早关闭等)时更具弹性并遵守提供给您的API。

您能提供一些您尝试做的例子吗?@BellAppLab感谢您的评论!简而言之,我想使用API:
-(nsurlSessionPloadTask*)uploadTaskWithRequest:(NSURLRequest*)request fromFile:(NSURL*)fileURL
,但我不知道如何从Photos框架获取fileURL。你不能获取数据并将其写入文件吗?@BellAppLab是的,这是一个解决方案,但我正在寻找一种更好的方法(无需将数据写入文件),将每张照片写入一个文件可能真的很有必要?谢谢你的回答,实际上我想开发一个照片备份应用程序,所以我需要将手机中的所有照片上传到云服务器。我的困惑是,为什么我应该抓取照片的数据并将其写入文件?我期待一个更好的方法。正如我在回答中所解释的,写入文件是更好的方法。尤其是因为你要处理很多照片。