Почему массивы обрабатывают строки, содержащие шведские символы ÅÄÖ, используя два или более индекса? - PullRequest
1 голос
/ 30 марта 2011

Хорошо, моя проблема в том, что всякий раз, когда я собираю данные из анализатора в массив, где строка содержит шведские символы ÅÄÖ.В моем примере

[schemaInfoArray objectAtIndex:3] 

должен быть @ "Lördag", но сохранен как @ "L", а

[schemaInfoArray objectAtIndex:4] 

содержит остальную часть строки, которая представляется как@ "ördag"

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

    {

        tempStrang = string;
        [schemaInfoArray insertObject:tempStrang atIndex:uppraknare];
        uppraknare++;



    }



    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
        {




            if ( [elementName isEqualToString:@"schemaInfo"] ) 
            {

            }
            if ( [elementName isEqualToString:@"modfromtid"] ) 
            {
                frommodarbtid = [schemaInfoArray objectAtIndex:0];
            }

            if ([elementName isEqualToString:@"modtomtid"] ) 
            {
                tommodarbtid = [schemaInfoArray objectAtIndex:1];
            }
            if ([elementName isEqualToString:@"modrast"] ) 
            {
                modrast = [schemaInfoArray objectAtIndex:2];
            }
            if ([elementName isEqualToString:@"benamning"] ) 
            {
                benamning = [schemaInfoArray objectAtIndex:3];

            }
            if ([elementName isEqualToString:@"fromnormarb"] ) 
            {
                fromnormarbtid = [schemaInfoArray objectAtIndex:4];
            }
            if ([elementName isEqualToString:@"tomnormarb"] ) 
            {
                tomnormarbtid = [schemaInfoArray objectAtIndex:5];
            }
            if ([elementName isEqualToString:@"rast"] ) 
            {
                normrast = [schemaInfoArray objectAtIndex:6];
            }       

        }

Есть ли у кого-нибудь мысли о том, как на самом деле получить @ "Lördag" для сохранения в ОДНОМ индексе вместо разделения на несколько индексов?Это действительно разрушает структуру вещей, которые должны быть представлены.

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Это документированный выбор дизайна от Apple , и он не имеет ничего общего со шведскими символами:

Поскольку string может быть только частьюОбщее количество символов для текущего элемента, вы должны добавить его к текущему накоплению символов, пока элемент не изменится.

Так что вы должны сделать так, как они говорят: используйте NSMutableString для накопления результатови, когда элемент изменяется, сохраните буфер в постоянный (желательно) неизменный NSString.

. По запросу, вот пример.Он был написан без какой-либо IDE, так что есть вероятность, что он будет работать, но нет никаких гарантий, что он будет компилироваться или работать.

@interface Foo : NSObject<NSXMLParserDelegate> {
    NSMutableString* accumulator;
    NSMutableArray* schemaInfoArray;
    int uppraknare; // whatever 'uppraknare' means
}

/* snip */

@end

@implementation Foo

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string
{
    // only accumulate characters, until we get notified that we went through
    // the whole XML element
    [accumulator appendString:string];
}

-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)nsuri qualifiedName:(NSString*)qName
{
    // we went through the whole element! time to save!
    NSString* immutableResult = [accumulator copy];
    [schemaInfoArray insertObject:immutableResult atIndex:uppraknare];
    uppraknare++;
    [immutableResult release];
    // clear the accumulator for the next element
    [accumulator deleteCharactersInRange:NSMakeRange(0, [accumulator length])];

    /* the rest of your code here */
}

@end
1 голос
/ 30 марта 2011

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string не обязательно содержит полное содержимое строки. У вас должна быть переменная экземпляра класса, которая является NSMutableString, которая может добавлять все foundCharacters между вызовами didStartElement и didEndElement. Внутри didEndElement добавьте строку в schemaInfoArray.

...