Pregunta

Hola, para la vida de mí, esto no está funcionando: ..

NSMutableString *b64String = [[[NSMutableString alloc] initWithFormat:@"Basic %@", [string _base64Encoding:string]] autorelease];

    [b64String stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    NSLog(@"(%@)", b64String);

    NSRange foundRange = [b64String rangeOfString:@"\n"];
    if (foundRange.location != NSNotFound)
        [b64String stringByReplacingOccurrencesOfString:@"\n"
                                            withString:@""
                                               options:0 
                                                 range:foundRange];
    NSLog(@"(%@)", b64String);

Tanto los métodos que he encontrado en SO - y ellos no parecen funcionar ... tengo que estar haciendo algo mal, muy mal. Pero, si rompo en la NSLog de, puedo ver claramente el "\ n" en la cadena (en el depurador y en el cabo de la consola)

Además, esto es cierto:

if (foundRange.location != NSNotFound)

Y puedo ver si ejecutar el método stringByReplacingOccurencesOfString ...

¿Fue útil?

Solución

Simplemente llame

b64String = [b64String stringByReplacingOccurrencesOfString:@"\n" withString:@""]

es suficiente (recuerda a -release copias innecesarias de b64string Es posible que desee almacenar en otra variable.) O que utilice el método mutable real con toda la gama:

[b64String replaceOccurrencesOfString:@"\n" withString:@"" options:0 range:NSMakeRange(0, [b64String length])];

En -stringByReplacingOccurrencesOfString:withString:options:range:, el parámetro range especifica el intervalo en el que se produce la sustitución. Eso no significa nada conseguirá fuera del rango reemplazado. En su código, se pasa el rango de la primera aparición de \n. El efecto es sólo 1 ocurrencia de \n será eliminado.

Los métodos stringBy... son para las cadenas inmutables. No modificarán la cadena de entrada. En su lugar, crean una copia de la cadena inmutable y devolver la copia modificada.

Otros consejos

Esto es porque el stringByTrimmingCharactersInSet: método devuelve una nueva cadena en lugar de modificar la actual.

NSString* trimmedString = [b64String stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];

Puede recortar las nuevas líneas de un NSMutableString en el lugar, pero hay que utilizar el método CFStringTrim de la Fundación Core.

Objetivo-C:

NSMutableString *string = [NSMutableString stringWithString:@"\nfoo bar baz\n"];
CFStringTrim((__bridge CFMutableStringRef)string, (__bridge CFStringRef)@"\n");

Swift:

let string = NSMutableString(string: "\nfoo bar baz\n")
CFStringTrim(string as CFMutableString, "\n" as CFString)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top