私がやろうとしているのは、ビデオを 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 : アプリケーションがそのコンテンツを作成した場合、削除要求の確認を無効にするにはどうすればよいですか? (他のものは削除したくありません)。
注:これはかなり奇妙なことだと言う人もいるかもしれませんが、アプリケーションは内部で配布されており、このようにするのには十分な理由があります (ユーザーが何らかの理由でアプリケーションを削除したとしても、ビデオ コンテンツは失われるにはあまりにも貴重です。または、何か問題が発生した場合は、ビデオを保存できるようにする必要があります)、それについて質問しないで、質問に注意を向けてください :)