2012-02-11 20 views
48

Tengo un diccionario NSMutable que contiene ID de archivo y su extensión de nombre de archivo + en la forma simple de fileone.doc o filetwo.pdf. Necesito determinar qué tipo de archivo es para mostrar correctamente un ícono relacionado en mi UITableView. Esto es lo que he hecho hasta ahora.Obtener la extensión de un archivo contenido en un NSString

NSString *docInfo = [NSString stringWithFormat:@"%d", indexPath.row]; //Determine what cell we are formatting 
NSString *fileType = [contentFiles objectForKey:docInfo]; //Store the file name in a string 

escribí dos expresiones regulares para determinar qué tipo de archivo que estoy viendo, pero nunca devuelven un resultado positivo. No he usado expresiones regex en la programación de iOS antes, así que no estoy del todo seguro de si lo estoy haciendo bien, pero básicamente copié el código de la página Descripción de clase.

NSError *error = NULL; 
NSRegularExpression *regexPDF = [NSRegularExpression regularExpressionWithPattern:@"/^.*\\.pdf$/" options:NSRegularExpressionCaseInsensitive error:&error]; 
NSRegularExpression *regexDOC = [NSRegularExpression regularExpressionWithPattern:@"/^.*\\.(doc|docx)$/" options:NSRegularExpressionCaseInsensitive error:&error]; 
    NSUInteger numMatch = [regexPDF numberOfMatchesInString:fileType options:0 range:NSMakeRange(0, [fileType length])]; 
    NSLog(@"How many matches were found? %@", numMatch); 

Mis preguntas serían, ¿hay una manera más fácil de hacer esto? Si no, ¿mi expresión regular es incorrecta? Y finalmente, si tengo que usar esto, ¿es costoso en tiempo de ejecución? No sé cuál será la cantidad promedio de archivos que tendrá un usuario.

Gracias.

Respuesta

143

Usted está buscando [fileType pathExtension]

NSString Documentation: pathExtension

+1

Oh, no sabía que NSString tiene la propiedad 'pathExtension' – remy

+4

Objective-C simplemente hace las cosas tan fáciles; ¡No necesito pensar en soluciones tan duras! Gracias David. – TheJer

+3

Estoy contento de no haber intentado y hacer esta función yo mismo – Will

6
//NSURL *url = [NSURL URLWithString: fileType]; 
NSLog(@"extension: %@", [fileType pathExtension]); 

Edición puede utilizar pathExtension en NSString

Gracias a David Barry

+0

Puede llamar pathExtension directamente en la cadena, no hay necesidad de crear un NSURL primero. –

+3

¿Por qué acaba de arrancar la respuesta anterior y luego lo acredita? –

3

Trate de usar [fileType pathExtension] para obtener la extensión del archivo.

4

Prueba esto:

NSString *fileName = @"resume.doc"; 
NSString *ext = [fileName pathExtension]; 
0

En Swift 3 se podría utilizar una extensión:

extension String { 

public func getExtension() -> String? { 

     let ext = (self as NSString).pathExtension 

     if ext.isEmpty { 
      return nil 
     } 

     return ext 
    } 
} 
0

probar esto, a mí me funciona.

NSString *fileName = @"yourFileName.pdf"; 
NSString *ext = [fileName pathExtension]; 

Documentación aquí para NSString pathExtension

Cuestiones relacionadas