2013-07-16 21 views
5

Ho un'app in cui ho una cartella denominata "Immagini" nel mio pacchetto principale.Copia cartella dalla cartella principale alla directory documenti in iphone

In questa cartella è presente un'altra cartella denominata "Immagini1" contenente alcune immagini.

Quando la mia app Avvia voglio la cartella "Immagini" nella directory dei documenti.

Desidero recuperare le immagini dalla cartella "Immagini1".

Ma non riesco a ottenere le mie immagini nella cartella "Immagini" nella directory dei documenti con il seguente codice.

cura

 BOOL success1; 
    NSFileManager *fileManager1 = [NSFileManager defaultManager]; 
    NSError *error1; 
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory1 = [paths1 objectAtIndex:0]; 
    NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"Images/Images1"]; 
    success1 = [fileManager fileExistsAtPath:writableDBPath1]; 

    if (success1) return; 
    // The writable database does not exist, so copy the default to the appropriate location. 
    NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images/Images1"]; 

    NSLog(@"Default : %@",defaultDBPath1); 
    success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1]; 

    if (!success1) { 
     NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error1 localizedDescription]); 

    } 

Please help me.

+0

come nota a margine: prepararsi per app store rifiuto perché molto probabilmente violato le [indicazioni per la conservazione di dati] (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide /PerformanceTuning/PerformanceTuning.html#//apple_ref/doc/uid/TP40007072-CH8-SW9). Non si suppone di salvare i dati che è possibile ricreare facilmente nella directory dei documenti. –

risposta

3

Sei sicuro di avere i file nell'albero delle cartelle?

NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"/Images/Images1"]; 

di solito quando xcode crea un pacchetto appiattisce il contenuto della directory. Quindi per prima cosa controlla di avere tutte le cose nella tua cartella sorgente. Anche se vedi che la cartella è mostrata nel tuo pacchetto explorer, quando copiata nell'app, vedrai che le immagini si trovano nella cartella principale. Per evitare ciò, quando aggiungi la cartella Immagine, nel tuo progetto xcode, puoi selezionare l'opzione 'crea riferimento cartella'.

Tuttavia, la scrittura potrebbe non riuscire a causa di una sovrascrittura. In tal caso è necessario implementare un metodo delegato per NSFileManager indicato di seguito.

- (void) copyFolder { 
    BOOL success1; 
    NSFileManager *fileManager1 = [NSFileManager defaultManager]; 
    fileManager1.delegate = self; 
    NSError *error1; 
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory1 = [paths1 objectAtIndex:0]; 
    NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"/Images"]; 
    success1 = [fileManager1 fileExistsAtPath:writableDBPath1]; 
    if (success1) 
    { 

     NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images"]; 
     NSLog(@"default path %@",defaultDBPath1); 
     success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1]; 
    } else { 
     if (![[NSFileManager defaultManager] fileExistsAtPath:writableDBPath1]) 
      [[NSFileManager defaultManager] createDirectoryAtPath:writableDBPath1 withIntermediateDirectories:NO attributes:nil error:&error1]; 
    } 
} 

- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error copyingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath{ 
    if ([error code] == 516) //error code for: The operation couldn’t be completed. File exists 
     return YES; 
    else 
     return NO; 
} 
+0

Sì, ce l'ho. Non riesco a capire cosa c'è di sbagliato in questo codice. Per favore, aiutatemi se lo sapete. – Manthan

+0

Ho aggiornato la risposta. – karim

+0

Penso che questa sia la chiave: createDirectoryAtPath :. La directory non esiste nella cartella dei documenti e il gestore file iOS non crea automaticamente le directory. È necessario crearli esplicitamente. – Bek

Problemi correlati