2012-03-07 14 views
7

Ho un'app nell'app store che utilizza i dati principali per conservare gran parte dei dati. L'eccezione è la memorizzazione delle immagini. Conservo le immagini nelle sottodirectory nella directory Documenti e memorizzo un riferimento NSURL a quell'immagine nell'attributo oggetto appropriato nell'archivio dati principale.Aggiornamenti app, directory NSURL e documenti

Abbiamo notato che, quando un aggiornamento arriva all'app store, tali immagini non vengono trovate e quindi non vengono visualizzate utilizzando i riferimenti memorizzati con la versione precedente dell'app. Ora, ho il sospetto che il problema è che, dal momento che stiamo usando dispositivi di sviluppo per test, questo problema si propaga perché la Directory nella directory Applicazioni a cui l'app dev utilizza differisce da quella che l'App Store sta creando/usando. Ho notato differenze tra la directory dell'app store per l'app in Applicazioni e quella creata durante il debug delle versioni in Xcode. Come tale, l'URL memorizzato nei dati di base punta alla cartella delle applicazioni sbagliata. Questo è un po 'difficile da eseguire il debug, poiché non riesco a scaricare una versione di app precedente, una volta che la nuova versione è stata rilasciata nel negozio.

Quindi ho un paio di domande. Posso garantire che la sottodirectory Applicazioni in cui la gente che scarica le versioni della stessa app sarà la stessa, rendendo questo un non-problema per i dispositivi non di sviluppo?

Devo archiviare url relativi o stringhe di immagini per rappresentare la posizione di queste risorse, o dovrei essere a posto con la memorizzazione di quelli che sono gli URL assoluti?

Grazie mille, Felipe

risposta

13

Si dovrebbe usare URL relativi per memorizzare i riferimenti ai file. L'URL assoluto è destinata a cambiare dopo un aggiornamento app

file salvati Durante App Aggiornamenti

Quando un utente scarica un aggiornamento app, iTunes installa l'aggiornamento in una nuova cartella app. Quindi sposta i file di dati di dell'utente dalla vecchia installazione alla nuova directory di app prima di eliminare la vecchia installazione. I file nelle seguenti directory sono garantiti da conservare durante il processo di aggiornamento:

  • Application_Home/Documenti
  • Application_Home/Libreria

Sebbene i file in altre directory utente può anche essere spostato, non dovresti fare affidamento su perché siano presenti dopo un aggiornamento.

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

Thx alla sandbox, la casa applicazione è anche la sede dell'utente. Quindi è possibile utilizzare l'unix tilde che è una mano breve per l'utente home, ad esempio ~/Documents, ~/Library e così via.

Utilizzare -[NSString stringByAbbreviatingWithTildeInPath] per trasformare un percorso completo in un percorso ~ relativo.E invertire con -[NSString stringByExpandingTildeInPath].

+0

Grazie mille! Questo è quello che dovevo sapere! – flizit

+2

Non sapevo che fosse stata creata una nuova directory app quando iTunes installava gli aggiornamenti: ho finito per avere collegamenti simbolici usando percorsi assoluti che sono stati invalidati. Quindi attenzione a questo comportamento sviluppatori iOS! :) –

+0

Questo link è rotto. Prova: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html –

0

Penso che quello che stai cercando è la seguente:

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];