2012-06-20 12 views
6

Ho una directory NSFileWrapper in cui desidero aggiornare un determinato FileWrapper. Mi stavo chiedendo quale sia il modo migliore per farlo?Sostituzione di NSFileWrappers

Finora ho usato questo codice:

[self.fileWrapper addRegularFileWithContents:photoData 
          preferredFilename:@"photo.data"]; 

Tuttavia, ogni volta che il FileWraper esiste già, ottengo i duplicati nel mio FileWrapper che sembrano così:

"1__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6bb0260>"; 
"2__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6b89b80>"; 
"3__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6ba1700>"; 
"4__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6bc8480>"; 
"photo.data" = "<NSFileWrapper: 0x6bcfc50>"; 

Come posso evitare che questo e semplicemente sostituire il FileWrapper - in questo caso photo.data? Non ho trovato alcun metodo per sostituire FileWrappers nello NSFileWrapper Class Reference.

risposta

5

Penso che questo possa essere la soluzione:

NSFileWrapper *oldFileWrapper = [self.fileWrapper.fileWrappers objectForKey:fileName]; 
if (oldFileWrapper) [self.fileWrapper removeFileWrapper:oldFileWrapper]; 

[self.fileWrapper addRegularFileWithContents:[self encodeObject:object] 
          preferredFilename:fileName]; 
0

Ho appena imbattuto in questo problema e per me era perché avevo una cartella denominata "Risorse" e uno di nome "risorse". Questo ha creato un problema di iCloud perché su Mac OS X il file system non è case sensitive, ma è su iOS.

Sembra che il problema sottostante nel tuo caso potrebbe anche essere correlato a lettere maiuscole/minuscole. Ovviamente lo stai correggendo sostituendo il file wrapper, che elimina e ricrea in modo efficace il file. Questa potrebbe essere una soluzione accettabile per i file di piccole dimensioni, ma può essere molto inefficiente per i file più grandi o più in una directory (perché il file verrebbe sincronizzato anche se non fosse cambiato).

+0

I file system OS X possono essere case-sensitive o case-insensitive ... dipende da come l'utente formatta l'unità. –

+0

Questo è un punto valido. Sto assumendo il formato predefinito (come quando si acquista un Mac) "Mac OS Extended (Journaled)". – auco