Pregunta

Estoy tratando de codificar una cadena en mi aplicación iOS 5 usando ARC.

Así es como lo hago:

- (NSString *)escape:(NSString *)text
{
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                          (__bridge CFStringRef)text, NULL,
                                          (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                          kCFStringEncodingUTF8);
}

Luego lo llamo con datos de prueba como este:

NSLog([self escape:@"kalel///&&&???"]);

Pero la salida que obtengo del NSLog Es esto:

kalel0.0000000.0000000.00000022623F0.0000000.000000

Eso simplemente no parece correcto, pero no importa lo que no pueda hacerlo bien

¿Fue útil?

Solución

Su escape la función está bien. El problema es de una manera que llamas NSLog:

escape produce la cadena kalel%2F%2F%2F%26%26%26%3F%3F%3F para su aporte. NSLog Interpreta esta cadena como una cadena de formato e imprime un poco de basura como números de punto flotante justo después kalel ¡palabra!

Siempre debes llamar NSLog con una cadena constante como primer argumento, por ejemplo:

NSLog(@"%@", [self escape:@"kalel///&&&???"]);

PD Tienes una fuga de memoria en escape --- debería return (__bridge_transfer NSString *) A medida que transfiere el objeto CF retenido al espacio C Objetivo C.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top