我想要做的是将视频保存到 PHPhotoLibrary,然后在上传到应用程序中的客户端远程服务器完成时将其删除(基本上,照片库用作临时存储以添加额外的安全层,以防万一发生任何故障(我已经将我的视频保存在应用程序目录中)。
问题:
问题是要让它工作,一切都必须在没有用户输入的情况下工作。您可以像这样将视频写入照片库:
func storeVideoToLibraryForUpload(upload : SMUpload) {
if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.Authorized {
// Don't write to library since this is disallowed by user
return
}
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
// Write asset
let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(NSURL(fileURLWithPath: upload.nonsecureFilePath!)!)
let assetPlaceholder = assetRequest.placeholderForCreatedAsset
let localIdentifier = assetPlaceholder.localIdentifier
// Store local identifier for later use
upload.localAssetIdentifier = localIdentifier
}, completionHandler: { (success, error) -> Void in
....
})
}
这完美无瑕,我获得了本地标识符,我将其存储起来以备后用......独角兽和彩虹。
现在,当我想在上传完成后立即删除该视频时,我会调用以下内容:
func removeVideoFromLibraryForUpload(upload : SMUpload) {
// Only proceed if there is asset identifier (video previously stored)
if let assetIdentifier = upload.localAssetIdentifier {
// Find asset that we previously stored
let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetIdentifier], options: PHFetchOptions())
// Fetch asset, if found, delete it
if let fetchedAssets = assets.firstObject as? PHAsset {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
// Delete asset
PHAssetChangeRequest.deleteAssets([fetchedAssets])
}, completionHandler: { (success, error) -> Void in
...
})
}
}
}
成功删除视频,但用户必须先确认删除。这是一个问题,因为备份不起作用。
我显然知道为什么会有确认(例如,您不会清除整个用户库,但问题是,我的应用制作了视频 - 所以我认为会有办法解决它,因为作为“所有者”我应该不这样做,或者至少可以选择禁用确认。
提前致谢!
TLDR:如果我的应用程序创建了该内容,我如何禁用对删除请求的确认?(我不想删除其他任何内容)。
注意:有人可能会说这是一件很奇怪的事情,但应用程序是内部分发的,有充分的理由这样做(视频内容太有价值,不能丢失,即使用户出于某种原因删除了应用程序,或者有什么问题,我们需要能够保存视频),所以请不要质疑,只要把注意力集中在这个问题上:)