2012-02-23 13 views
6

Desidero eliminare un'immagine dalla mia app per iPhone. Io uso il metodo seguente, passando il nome dell'immagine come argomento.Elimina immagine dalla directory app in iPhone

Il problema è che l'immagine non viene cancellata.

- (void)removeImage:(NSString*)fileName { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent: 
         [NSString stringWithFormat:@"%@.png", fileName]]; 

    [fileManager removeItemAtPath: fullPath error:NULL]; 
    NSLog(@"image removed: %@", fullPath); 

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];  
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]); 
} 

Le ultime due righe mostrano il contenuto nella mia directory app e l'immagine che voglio cancellare è ancora lì. Che cosa sto facendo di sbagliato?

risposta

5

Si sta tentando di eliminare un file nella directory Documenti. Quindi leggi il contenuto della directory delle risorse del bundle. Queste non sono la stessa directory.

Se si sta tentando di eliminare un file nella directory Documenti, è necessario reindirizzare tale directory nel proprio NSLog() alla fine. Se stai cercando di eliminare un file all'interno del tuo pacchetto, questo è impossibile. I pacchetti di app sono firmati e non possono essere modificati.

+0

Sto tentando di eliminare un'immagine che ho aggiunto in XCode, quindi è probabilmente nel mio pacchetto. È l'immagine predefinita. Sto cercando di eliminare questo e aggiungerne uno nuovo. – bruno

+1

Non è possibile eliminare le immagini che si trovano nell'AppBundle (queste sono immagini aggiunte in Xcode). – rckoenes

+0

Non posso sostituire l'immagine predefinita, invece di eliminarla? – bruno

4

il codice sia ok, in modo da provare l'aggiunta di qualche oggetto 'NSError' a voi il codice:

- (void)removeImage:(NSString*)fileName { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent: 
         [NSString stringWithFormat:@"%@.png", fileName]]; 

    NSError *error = nil; 
    if(![fileManager removeItemAtPath: fullPath error:&error]) { 
     NSLog(@"Delete failed:%@", error); 
    } else { 
     NSLog(@"image removed: %@", fullPath); 
    } 

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];  
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]); 
} 

Nel codice sopra ho passato un NSError il parametro di errore di removeItemAtPath. Se il sistema non può cancellare il file, questo metodo restituirà NO e riempirà l'oggetto error con l'errore generato.

+0

"Impossibile completare l'operazione. Nessun file o directory" Come si cercano file o cartelle? Perché sembra che ci sia un'altra cartella in cui vengono salvate le immagini. – bruno

+0

Bene, dove hai salvato l'immagine nel primo. – rckoenes

2

Sulla base del tuo commento ho scoperto che stai cercando di eliminare il file default.png e sostituirlo con un altro. Sfortunatamente, questo è impossibile. L'immagine default.png fa parte del pacchetto di applicazioni, che non può essere modificato una volta che è stato creato e firmato (questa è una misura di sicurezza di Apple, quindi le applicazioni non possono cambiare dopo essere state esaminate). Le uniche posizioni in cui è possibile creare ed eliminare file si trovano nella sandbox fornita alla propria applicazione (la cartella Documenti).

+0

È sulle linee guida per le mele? Perché non ho trovato nulla di simile a questo. – bruno

+0

Si trovava nella "Guida alla programmazione app iOS" (la sezione citata qui: http://stackoverflow.com/questions/8122267/app-bundle-protection-signed-bundle-may-be-modified) ma sembrano averlo modificato. Mi sono guardato attorno e ho trovato questo: https://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/AppSigning.html che sembra indicare che solo le parti eseguibili sono effettivamente firmate. Tuttavia, non forniscono un modo per eseguire effettivamente la modifica in fase di esecuzione. –

+0

Ecco la sezione su quanto intendono per te essere in grado di fare: https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html# // apple_ref/doc/uid/TP40007072-CH6-SW12 –

Problemi correlati