Comportamiento extraño de NSScanner en la eliminación simple de espacios en blanco

Estoy tratando de reemplazar todos los espacios en blanco múltiples en algún texto con un solo espacio. Esta debería ser una tarea muy simple, sin embargo, por alguna razón, está devolviendo un resultado diferente al esperado. ¡He leído los documentos en NSScanner y parece que no funciona correctamente!

NSScanner *scanner = [[NSScanner alloc] initWithString:@"This    is   a test of NSScanner   !"];
NSMutableString *result = [[NSMutableString alloc] init];
NSString *temp;
NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet];
while (![scanner isAtEnd]) {

    // Scan upto and stop before any whitespace
    [scanner scanUpToCharactersFromSet:whitespace intoString:&temp];

    // Add all non whotespace characters to string
    [result appendString:temp];

    // Scan past all whitespace and replace with a single space
    if ([scanner scanCharactersFromSet:whitespace intoString:NULL]) {
        [result appendString:@" "];
    }

}

Pero por alguna razón el resultado es@"ThisisatestofNSScanner!" en lugar de@"This is a test of NSScanner !".

Si lees los comentarios y lo que cada línea debe lograr, ¡parece bastante simple!scanUpToCharactersFromSet debería detener el escáner justo cuando encuentre espacios en blanco.scanCharactersFromSet luego debe avanzar el escáner más allá del espacio en blanco hasta los caracteres que no son espacios en blanco. Y luego el ciclo continúa hasta el final.

¿Qué me estoy perdiendo o no entiendo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta