swift – 在应用程序处于后台时访问PHPhotoLibrary

swift – 在应用程序处于后台时访问PHPhotoLibrary,第1张

概述我有一个NSURLDownloadTask,可以在后台成功下载文件(大图像或视频文件).我成功复制了网址并调用此功能将我的网址保存到照片库.如您所见,我想发送UILocalNotification以通知用户他们的下载已完成. 我的问题是虽然PHP应用程序处于后台时会调用PHPhotoLibrary.sharedPhotoLibrary().performChanges,但它的完成块不会. (但它要 我有一个NSURLDownloadTask,可以在后台成功下载文件(大图像或视频文件).我成功复制了网址并调用此功能将我的网址保存到照片库.如您所见,我想发送UIlocalnotification以通知用户他们的下载已完成.

我的问题是虽然PHP应用程序处于后台时会调用PHPhotolibrary.sharedPhotolibrary().performChanges,但它的完成块不会. (但它要求应用程序重新回到前台)我试着通过评论抓住主线程,看看是否有帮助,但事实并非如此.并且我不想在完成块之前发送本地通知,因为我想告诉用户下载成功/失败的通知.

我想我可以在NSURLDownloadDelegateTask方法中发送通知.这将让用户知道文件已成功下载,但不知道是否将其保存到他们的照片是成功的.我不想告诉我的用户他们的下载成功,然后他们无法在他们的照片库中找到它.

这是我访问和修改照片库的代码.

func saveURLtophotoslibrary(url: NSURL,filename: String) {        if let fileExtension = url.pathExtension {            PHPhotolibrary.sharedPhotolibrary().performChanges({                let fileUnmanagedIDTag = UTTypeCreatePreferredIDentifIErForTag(kUTTagClassfilenameExtension,fileExtension,nil)                let fileIDTag = fileUnmanagedIDTag?.takeRetainedValue()                if let fileUTType = fileIDTag {                    if UTTypeConformsTo(fileUTType,kUTTypeImage) {                        PHAssetChangeRequest.creationRequestForAssetFromImageAtfileURL(url)                    } else if UTTypeConformsTo(fileUTType,kUTTypeMovIE){                        PHAssetChangeRequest.creationRequestForAssetFromVIDeoAtfileURL(url)                    }                } else {                    print("Error getting type of file from download")                }            }) { (success,error) in                //dispatch_async(dispatch_get_main_queue(),{                    if success {                        print("finished")                        self.sendlocalnotification(downloadSuccessful: true,error : nil,filename: filename)                    } else {                        if let error = error {                            self.sendlocalnotification(downloadSuccessful: false,error : error,filename: filename)                        }                    }                //})            }        }    }
解决方法 好吧找到了我的工作解决方案.发现应用程序在没有运行代码后立即暂停,因此应用程序在我的完成处理程序准备好被调用时被暂停.我使用UIApplications共享实例来创建一个新的后台任务.这使我的应用程序有足够的时间来调用完成处理程序.然后我在收到通知后立即结束后台任务.

func saveURLtophotoslibrary(url: NSURL,filename: String) {    //Returns ID to later be passed into method that ends task.    let backgroundID : Int = UIApplication.sharedApplication().beginBackgroundTaskWithname("Save to Photo library Task") {        print("Background task expired")    }    if let fileExtension = url.pathExtension {        PHPhotolibrary.sharedPhotolibrary().performChanges({            let fileUnmanagedIDTag = UTTypeCreatePreferredIDentifIErForTag(kUTTagClassfilenameExtension,nil)            let fileIDTag = fileUnmanagedIDTag?.takeRetainedValue()            if let fileUTType = fileIDTag {                if UTTypeConformsTo(fileUTType,kUTTypeImage) {                    PHAssetChangeRequest.creationRequestForAssetFromImageAtfileURL(url)                } else if UTTypeConformsTo(fileUTType,kUTTypeMovIE){                    PHAssetChangeRequest.creationRequestForAssetFromVIDeoAtfileURL(url)                }            } else {                print("Error getting type of file from download")            }        }) { (success,error) in                if success {                    print("finished")                    self.sendlocalnotification(downloadSuccessful: true,filename: filename)                } else {                    if let error = error {                        self.sendlocalnotification(downloadSuccessful: false,filename: filename)                    }                }            //End background task here passing in ID of task from earlIEr.            UIApplication.sharedApplication().endBackgroundTask(backgroundID)        }    }}
总结

以上是内存溢出为你收集整理的swift – 在应用程序处于后台时访问PHPhotoLibrary全部内容,希望文章能够帮你解决swift – 在应用程序处于后台时访问PHPhotoLibrary所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存