Pergunta

Eu estou tentando analisar um Arquivo XML.Funcionou muito bem até hoje...

Aqui está como eu começar a analisar o XML:

NSString *link = [[NSString alloc] init];
link = @"link_to_xml_file";

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:link] 
                                             cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                                         timeoutInterval:30.0];

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

E aqui está como eu estou usando os dados recebidos:

- (void)connection:(NSURLConnection *)theConnection 
    didReceiveData:(NSData *)incrementalData 
{
    if (data == nil)
        data = [[NSMutableData alloc] init];

    [data appendData:incrementalData];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",actual]];

    NSError *parseError = nil;
    NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] error:&parseError];

    if (parseError != nil) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:[parseError localizedDescription] delegate:nil cancelButtonTitle:@"Zurück" otherButtonTitles:nil];
        [alert show];
        [alert release];
    } //shows an alertview with NSXMLParserErrorDomain error 5

    NSLog(@"String: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); //returns null

    NSLog(@"Dictionary: %@",xmlDictionary); //returns null

    NSMutableDictionary *tempDictForAddDate = [[NSMutableDictionary alloc] initWithDictionary:xmlDictionary];

    NSDateFormatter *originalDate = [[NSDateFormatter alloc] init];
    [originalDate setDateFormat:@"dd.MM.yyyy"];

    NSString *today = [originalDate stringFromDate:[NSDate date]];

    [tempDictForAddDate setObject:today forKey:@"updated"];

    [tempDictForAddDate writeToFile:filePath atomically:YES];

    self.contentList = [[tempDictForAddDate objectForKey:@"xmlObject"] objectForKey:@"event"];

    [self sortContent];
}

O Ficheiro XML funciona no meu navegador.E cada etiqueta é fechado.Não existem erros, mas eu nunca obter os dados do arquivo.

Espero que alguém possa ajudar.

mavrick3.

Foi útil?

Solução

Você está (sabiamente) usando assíncrona url de conexão, mas isso significa que o seu didReceiveData representante será chamado várias vezes como os dados vem, então ela não será concluída no ponto que está a analisá-lo.

Você provavelmente quer mover a análise para o seguinte método de delegado.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

Ver Apple Documentação aqui

EDITAR:

Sempre uma boa ideia formalmente validar o XML - eu tendem a usar o w3c ferramentas http://www.w3schools.com/xml/xml_validator.asp

Também, quando as coisas utilizado para trabalhar, parar de trabalhar, eu sempre me pergunto o que mudou?É o arquivo de diferente?É o maior?Tem certeza de que está presente no servidor e o navegador não esteja usando uma versão em cache?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top