¿Lista de files guardados en el directory de documentos de iOS en un UITableView?

He configurado el siguiente código para save un file en el directory de documentos:

NSLog(@"Saving File..."); NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.networkingdexuk.com/logo.png"]]; AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"logo.png"]; operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Successfully downloaded file to %@", path); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; [operation start]; 

Sin embargo, deseo agregar cada file a una UITableView cuando se guarda correctamente. Cuando se toca el file en UITableView, me gustaría que UIWebView navegue a ese file (todo sin connection).

Además, ¿cómo puedo get el nombre del file y el final, como "logo.png" en lugar de http://www.networkingdexuk.com/logo.png ?

¿Cómo puedo hacer esto?

Aquí está el método que uso para get el contenido de un directory.

 -(NSArray *)listFileAtPath:(NSString *)path { //-----> LIST ALL FILES <-----// NSLog(@"LISTING ALL FILES FOUND"); int count; NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL]; for (count = 0; count < (int)[directoryContent count]; count++) { NSLog(@"File %d: %@", (count + 1), [directoryContent objectAtIndex:count]); } return directoryContent; } 
 -(NSArray *)findFiles:(NSString *)extension{ NSMutableArray *matches = [[NSMutableArray alloc]init]; NSFileManager *fManager = [NSFileManager defaultManager]; NSString *item; NSArray *contents = [fManager contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] error:nil]; // >>> this section here adds all files with the chosen extension to an array for (item in contents){ if ([[item pathExtension] isEqualToString:extension]) { [matches addObject:item]; } } return matches; } 

El ejemplo anterior es bastante auto explicativo. Espero que te conteste la segunda pregunta.

Para get los contenidos de un directory

 - (NSArray *)ls { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory]; NSLog(@"%@", documentsDirectory); return directoryContent; } 

Para get el último componente de ruta,

 [[path pathComponents] lastObject] 

Gracias Alex,

Aquí está la versión Swift

 func listFilesOnDevice() { let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let documentDirectory = paths[0] as! String let manager = NSFileManager.defaultManager() if let allItems = manager.contentsOfDirectoryAtPath(documentDirectory, error: nil) { println(allItems) } } 

Para un nombre de file más razonable:

NSString *filename = [[url lastPathComponent] stringByAppendingPathExtension:[url pathExtension]];

Sé que esta es una vieja pregunta, pero es buena y las cosas cambiaron en la publicación de iOS Sandboxing.

La ruta a todas las carpetas legibles / grabables dentro de la aplicación ahora tendrá un hash y Apple se reserva el derecho de cambiar esa ruta en cualquier momento. Cambiará en cada inicio de aplicación seguro.

Deberá get la ruta de acceso a la carpeta que desea y no puede codificarla como antes.

Pide el directory de documentos y en la matriz de devolución, está en la position 0. Luego, desde allí, usa ese valor para suministrar al NSFileManager para get el contenido del directory.

El código a continuación funciona bajo iOS 7 y 8 para devolver una matriz de contenido dentro del directory de documentos. Es posible que desee orderar de acuerdo con sus propias preferences.

 + (NSArray *)dumpDocumentsDirectoryContents { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSError *error; NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error]; NSLog(@"%@", directoryContents); return directoryContents; } 
 NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:dir_path]; NSString *filename; while ((filename = [dirEnum nextObject])) { // Do something amazing } 

para enumerar a través de TODOS los files en el directory

Swift 3.x

 let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] if let allItems = try? FileManager.default.contentsOfDirectory(atPath: documentDirectory) { print(allItems) }