Quello che sto cercando di fare è salvare i video su PHPhotoLibrary e quindi rimuoverli quando il caricamento sul server remoto dei client nell'applicazione è completato (in pratica, la libreria fotografica funge da memoria temporanea per aggiungere ulteriore livello di sicurezza in caso nulla fallisce (ho già salvare i miei VIDES nella directory applicazioni)Disabilita la conferma sulla richiesta di cancellazione in PHPhotoLibrary
problema:.
il problema è per questo al lavoro, tutto deve funzionare senza input da parte dell'utente Puoi scrivere video nella libreria di foto come questa:
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
....
})
}
E che funziona perfettamente, ottengo l'identificatore locale, lo memorizzo per un uso successivo .. Unicorni e arcobaleni.
Ora quando voglio per rimuovere quel video subito dopo finiture di upload, che io chiamo seguente:
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
...
})
}
}
}
che cancella con successo il video, ma l'utente deve confermare l'eliminazione prima. Questo è un problema in quanto il backup non funzionerà.
Ovviamente so perché c'è una conferma (quindi non si cancella tutta la libreria utente ad esempio, ma il fatto è che la mia app ha realizzato il video - e così ho pensato che ci sarebbe stato modo di aggirarlo, dato che come " proprietario" io non dovrebbe fare questo, o almeno hanno opzione per disabilitare la conferma
Grazie in anticipo
TLDR:.! Come è possibile disattivare la conferma su richiesta di eliminazione, se la mia domanda ha creato tale contenuto? (Non voglio cancellare nient'altro)
Nota: Qualcuno può probabilmente dire che è una cosa piuttosto strana da fare ma l'applicazione è distribuita internamente e ci sono buone ragioni per farlo in questo modo (il contenuto del video è troppo prezioso per essere perso, anche se l'utente cancella l'applicazione per alcuni ragione, o c'è qualcosa che va storto, dobbiamo essere in grado di preservare i video), quindi per favore non metterlo in discussione e focalizza la tua attenzione sulla domanda :)
Non conosco definitivamente la risposta a questa domanda, ma dubito che sia possibile. Una volta salvato un asset nella libreria di foto del dispositivo, non sei più il proprietario ed è giusto che richieda una conferma di eliminazione per il motivo che hai già menzionato. Quindi, ignorando la tua "Nota" per un minuto: cosa rende più sicuro il salvataggio dei tuoi beni tramite il framework Foto che salvarlo da solo? – Stuart
Sto salvando il contenuto del video personalmente nella directory dell'applicazione (crittografato), ma i video verranno eliminati se l'utente fe. rimuove l'applicazione; È già successo perché gli utenti sono strane creature, quindi stiamo cercando di impedire anche che - i video vengano archiviati in modo sicuro nelle foto. Il problema è che a causa di alcuni problemi di proprietà dei contenuti, dobbiamo eliminarli immediatamente mentre li carichiamo sul nostro server (in pratica c'è un sistema che continua a caricare dopo che il dispositivo è di nuovo su Internet, poiché il dispositivo viene utilizzato nel campo senza connessione). –
Quindi cosa succede quando l'utente cancella il suo dispositivo, o lo perde, o semplicemente elimina la risorsa direttamente da Foto? La perdita di contenuti viene generalmente evitata eseguendo il backup/sincronizzazione/_telling degli utenti per non eliminare la maledetta app_ (!), Non rubando il meccanismo di memorizzazione di un'altra app - si evita solo una delle tante "stupidità dell'utente"! Mi dispiace prenderti sul punto quando hai chiesto alle persone di non farlo, ma penso che valga la pena di prenderlo in considerazione. A meno che qualcuno con una maggiore conoscenza del framework Photos possa dimostrarmi sbagliato, penso che potresti dover sopportare l'avviso o considerare di ripensare il tuo approccio. – Stuart