如何将 AVCaptureMovieFileOutput 保存到 iCloud
Posted
技术标签:
【中文标题】如何将 AVCaptureMovieFileOutput 保存到 iCloud【英文标题】:How to save AVCaptureMovieFileOutput to iCloud 【发布时间】:2017-04-26 23:19:33 【问题描述】:我已经创建了一个电影文件,并且能够将它本地保存到设备上。但是,我想利用 icloud 文档并将其保存到 icloud 并公开共享。使用 swift 如何做到这一点?
我发现此链接用于保存常规文件,Save ios 8 Documents to iCloud Drive。我猜该方法是先将其本地保存到设备上,然后将其保存到云驱动器。但是有人有这个工作样本吗?例如下面的 UIDocument 函数的可能实现是什么?
override func contents(forType typeName: String) throws -> Any
override func load(fromContents contents: Any, ofType typeName: String?) throws
【问题讨论】:
【参考方案1】:不幸的是,几乎不可能通过 iCloud Drive “共享”东西。使用 Dropbox。这是保存文件的代码,您当然首先需要设置 DropboxClientsManager.authorizedClient 变量,然后查看他们的开发页面。 Corepath 是您的文件的路径。
let client = DropboxClientsManager.authorizedClient!
client.files.upload(path: corePath, mode: .overwrite, autorename: false, input: textData).response response, error in
if let metadata = response
// Get file (or folder) metadata
if let error = error
switch error
case .routeError(let boxed, let requestId):
switch boxed.unboxed
case .path(let failedPath):
//rint("Failed update 2 path: \(failedPath)")
NotificationCenter.default.post(name: Notification.Name("dbFileCreationError"), object: nil, userInfo: nil)
break
default:
////rint("Unknown \(error)")
break
case .internalServerError(let code, let message, let requestId):
////rint("InternalServerError[\(requestId)]: \(code): \(message)")
NotificationCenter.default.post(name: Notification.Name("dbInternalServerError"), object: nil, userInfo: nil)
break
case .badInputError(let message, let requestId):
////rint("BadInputError[\(requestId)]: \(message)")
NotificationCenter.default.post(name: Notification.Name("dbBadInputError"), object: nil, userInfo: nil)
break
case .authError(let authError, let requestId):
////rint("AuthError[\(requestId)]: \(authError)")
NotificationCenter.default.post(name: Notification.Name("dbAuthError"), object: nil, userInfo: nil)
break
case .rateLimitError(let rateLimitError, let requestId):
////rint("RateLimitError[\(requestId)]: \(rateLimitError)")
NotificationCenter.default.post(name: Notification.Name("dbRateLimitError"), object: nil, userInfo: nil)
break
case .httpError(let code, let message, let requestId):
////rint("HTTPError[\(requestId)]: \(code): \(message)")
NotificationCenter.default.post(name: Notification.Name("dbHTTPError"), object: nil, userInfo: nil)
break
default:
break
【讨论】:
您能否详细说明为什么无法与 icloud 共享内容? 大卫,云驱动器不提供共享文档的 API,期间。如果您使用资产,您可以通过 cloudKit 共享内容,但您将通过专用应用程序共享给其他 AppleID 用户。您也可以通过活动应用分享内容,我也可以在第二个答案中发布代码。 这对苹果来说很奇怪。按照您的建议使用保管箱可以共享视频文件吗?是收费还是只是占用了用户当前分配的磁盘空间?换句话说,无论他们目前是免费获得还是付费。 如果您在 Dropbox 上分享视频;您有效地向他们发送了指向所述视频的链接。它不会占用与您共享视频的人的空间,除非他们[显然]选择保存它。【参考方案2】:您也可以通过活动应用程序分享内容,但不是您的想法。执行此操作的基本代码可以在此处查看。
@IBAction func shareButtonClicked(sender: UIButton)
let textToShare = "Swift is awesome! Check out this website about it!"
if let myWebsite = NSURL(string: "http://www.codingexplorer.com/")
let objectsToShare = [textToShare, myWebsite]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityVC.popoverPresentationController?.sourceView = sender
self.presentViewController(activityVC, animated: true, completion: nil)
本网页对此进行了更详细的说明。
http://www.codingexplorer.com/sharing-swift-app-uiactivityviewcontroller/
【讨论】:
以上是关于如何将 AVCaptureMovieFileOutput 保存到 iCloud的主要内容,如果未能解决你的问题,请参考以下文章