Domanda

Ho bisogno di copiare alcuni file di esempio dalla mia app di risorse della cartella e metterli nella mia app nella cartella documenti.Mi si avvicinò con il codice allegato, compila bene, ma non funziona.Tutte le directory faccio riferimento non esistono.Io non sono abbastanza sicuro di quello che sto facendo male, potrebbe qualcuno mi punto nella giusta direzione per favore?

NSFileManager*manager = [NSFileManager defaultManager];

NSString*dirToCopyTo = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

NSString*path = [[NSBundle mainBundle] resourcePath];

NSString*dirToCopyFrom = [path stringByAppendingPathComponent:@"Samples"];


NSError*error;

NSArray*files = [manager contentsOfDirectoryAtPath:dirToCopyFrom error:nil];

for (NSString *file in files)
{
        [manager copyItemAtPath:[dirToCopyFrom stringByAppendingPathComponent:file] toPath:dirToCopyTo error:&error];

        if (error)
        {
            NSLog(@"%@",[error localizedDescription]);
    }
}

EDIT:Ho appena modificato il codice così dovrebbe essere.Ora però c'è un altro problema:

2010-05-15 13:31:31.787 WriteIt Mobile[4587:207] DAMutableDictionary.h 2010-05-15 13:31:31.795 WriteIt Mobile[4587:207] FileManager Errore:Operazione non può essere completate.Il File esiste

EDIT :Ho risolto il problema dicendo NSFileManager i nomi dei file copiati destinazioni.

        [manager copyItemAtPath:[dirToCopyFrom stringByAppendingPathComponent:file] toPath:[dirToCopyTo stringByAppendingPathComponent:file] error:&error];
È stato utile?

Soluzione

Credo che il problema è in questa linea:

NSArray*files = [manager contentsOfDirectoryAtPath:dirToCopyTo error:nil];

state elencando i file in una directory di destinazione al posto della fonte. Cambiare a qualcosa come:

NSArray*files = [manager contentsOfDirectoryAtPath:dirToCopyFrom error:nil];

E si dovrebbe andare bene.

Altri suggerimenti

Credo che il problema è che yo stanno leggendo i file da copiare da dirToCopyTo e penso che si intende dirToCopyFrom

Anche per ottenere la directory di documenti che si dovrebbe utilizzare NSDocumentDirectory con - (NSArray *) URLsForDirectory: (NSSearchPathDirectory) inDomains directory: (NSSearchPathDomainMask) domainMask

Si prega di notare che lungo operazione di avvio deve essere evitato:

  1. Non una buona Esperienza Utente (ritardo e croppy comportamento)
  2. Watchdog in iOS può uccidere la tua app come se fosse bloccato.

Quindi, eseguire la copia in un thread secondario (o di funzionamento...o qualunque utilizza un diverso percorso di esecuzione).

Un altro problema si verifica se Hai bisogno di dati per compilare la tua UI:in questo caso:

  • Disattivare gli elementi dell'interfaccia utente
  • Avviare un async / filettato operazione
  • Nel completamento di chiamata indietro di copia (tramite una notifica, un protocollo..o con altri mezzi) notifica per l'interfaccia utente può avviare il recupero dei dati.

Abbiamo per esempio la copia di un file ZIP e decomprimerlo, ma ci vuole tempo, quindi abbiamo dovuto metterlo in un timer procedura che attivano l'interfaccia utente, quando fatto.

Se Avete bisogno di un esempio, ket, di farmi sapere.

PS:
Copia tramite file ZIP è PIÙ efficiente come:

  1. Chiamare solo dei file di sistema
  2. Molto meno byte da copiare

La cattiva notizia:è necessario utilizzare una routine di fare decomprimere file zip, ma li puoi trovare sul web.

La decompressione di file Zip deve essere più efficiente, in quanto queste chiamate vengono scritti direttamente in C e non in Cacao, con tutte le spese generali.

    [manager copyItemAtPath:[dirToCopyFrom stringByAppendingPathComponent:file] toPath:dirToCopyTo error:&error];

Il percorso di destinazione è il percorso che si desidera la copia di avere, tra cui il nome del file. Non è possibile passare il percorso di una directory in attesa NSFileManager per inserire il nome del file di origine; non farà questo.

la documentazione dice che il percorso di destinazione non deve descrivere tutto ciò che esiste:

  

... dstPath non deve esistere prima dell'operazione.

Nel tuo caso, è il percorso della directory di destinazione, in modo che ha esiste, che è il motivo per cui la copia ha esito negativo.

Hai bisogno di fare un percorso verso la destinazione file aggiungendo il nome del file desiderato ad esso. Allora non esisterà (se non precedentemente copiato), quindi la copia avrà successo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top