Merkwürdiges Verhalten von NSScanner beim einfachen Entfernen von Leerzeichen

Ich versuche, alle mehreren Leerzeichen in einem Text durch ein einzelnes Leerzeichen zu ersetzen. Dies sollte eine sehr einfache Aufgabe sein, die jedoch aus irgendeinem Grund ein anderes Ergebnis liefert als erwartet. Ich habe die Dokumente auf dem NSScanner gelesen und es scheint, als würde es nicht richtig funktionieren!

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:@" "];
    }

}

Aber aus irgendeinem Grund ist das Ergebnis@"ThisisatestofNSScanner!" Anstatt von@"This is a test of NSScanner !".

Wenn Sie die Kommentare durchlesen und wissen, was mit jeder Zeile erreicht werden soll, scheint es einfach genug zu sein !?scanUpToCharactersFromSet sollte den Scanner anhalten, sobald er auf Leerzeichen stößt.scanCharactersFromSet sollte dann den Scanner über das Leerzeichen hinaus bis zu den Nicht-Leerzeichen-Zeichen vorrücken. Und dann geht die Schleife bis zum Ende.

Was vermisse ich oder verstehe ich nicht?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage