Co próbuję zrobić, to zapisać wideo w PHPhotoLibrary, a następnie usunąć je po zakończeniu przesyłania do klienta zdalnego serwera w aplikacji (w zasadzie biblioteka zdjęć służy jako tymczasowe miejsce do przechowywania dodatkowych warstw bezpieczeństwa w przypadku w ogóle nic się nie powiedzie (I już uratować moje coraz konkretniejsze go w katalogu Programy)Wyłącz potwierdzenie na żądanie usunięcia w PHPhotoLibrary
problem:.
problemem jest za to do pracy, wszystko musi działać bez ingerencji ze strony użytkownika Możesz napisać film do biblioteki zdjęć w ten sposób:
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
....
})
}
I działa bezbłędnie, otrzymuję lokalny identyfikator, przechowuję go do późniejszego wykorzystania .. Jednorożce i tęcze.
Teraz, kiedy chcę natychmiast usunąć ten film po wykończeniach wysyłania wzywam następujący:
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
...
})
}
}
}
który z powodzeniem usuwa wideo, ale użytkownik ma pierwszy aby potwierdzić usunięcie. To jest problem, ponieważ tworzenie kopii zapasowych nie będzie działać.
Oczywiście wiem, dlaczego istnieje potwierdzenie (na przykład nie wyczyszczono całej biblioteki użytkownika, ale chodzi o to, że moja aplikacja zrobiła wideo - i dlatego pomyślałem, że będzie na to sposób, ponieważ " Właściciel”nie powinienem tego robić, albo przynajmniej mieć możliwość wyłączenia potwierdzenie
góry dziękuję
TLDR.! Jak mogę wyłączyć potwierdzenie na kasowania wniosek, jeśli moja aplikacja stworzona tej treści? (Nie chcę niczego więcej kasować).
Uwaga: Ktoś może powiedzieć, że to dość dziwna sprawa, ale aplikacja jest rozpowszechniana wewnętrznie i jest dobry powód, aby to zrobić (zawartość wideo jest zbyt cenna, aby można ją było zgubić, nawet jeśli użytkownik usunie aplikację dla niektórych powód, albo coś jest nie tak, musimy zachować filmy), więc nie kwestionuj tego i po prostu skup swoją uwagę na pytaniu :)
Nie znam definitywnie odpowiedzi na to pytanie, ale wątpię, czy to możliwe. Po zapisaniu zasobu w bibliotece zdjęć urządzenia użytkownik nie jest już jego właścicielem i może poprosić o potwierdzenie usunięcia z powodów, o których już wspomniałeś. Zignoruj więc "notatkę" na minutę: co sprawia, że zapisywanie swoich zasobów za pośrednictwem Photoshopa jest bezpieczniejsze niż samemu oszczędzasz? – Stuart
Sam zapisuję zawartość wideo do katalogu aplikacji (zaszyfrowane), ale filmy wideo zostaną usunięte, jeśli użytkownik na przykład. usuwa aplikację; Zdarzyło się to już, ponieważ użytkownicy są dziwnymi stworzeniami, więc staramy się temu zapobiec - filmy będą bezpiecznie przechowywane na zdjęciach. Problem polega na tym, że ze względu na pewne problemy z własnością treści musimy natychmiast usunąć, gdy przesyłamy je na nasz serwer (w zasadzie jest system, który kontynuuje przesyłanie po ponownym uruchomieniu urządzenia, ponieważ urządzenie jest używane w terenie bez połączenia). –
Co się dzieje, gdy użytkownik kasuje swoje urządzenie, lub je traci, lub po prostu usuwa zasób bezpośrednio ze Zdjęć? Utraty zawartości zazwyczaj unika się poprzez tworzenie kopii zapasowej/synchronizacji/wyzyskiwania użytkowników, aby nie usuwali tej cholernej aplikacji (!), A nie przez porwanie mechanizmu przechowywania innej aplikacji - unikacie tylko jednego z wielu "głupstw użytkownika"! Przepraszam, że podjąłem decyzję, kiedy nie prosiliście ludzi, ale myślę, że warto się nad tym zastanowić. Chyba że ktoś, kto ma większą wiedzę na temat ram Zdjęć, może mi udowodnić, że jestem w błędzie, myślę, że być może będziesz musiał się pogodzić z alarmem lub rozważyć ponowne przemyślenie swojego podejścia. – Stuart