2009-11-15 7 views
0

J'ai développé une applikation qui charge une URL spécifiée avec un analyseur XML. Cette URL change parfois, et toutes les 4 secondes, il rechargements. (Via NSTimer)Problème de périphérique Iphone XMLParser

Sur le simulateur, il fonctionne parfaitement, mais sur l'appareil, il est toujours le même (comme une sorte de mise en cache)

-(void)parseXMLFileAtURL:(NSString *) URL{ 
    NSLog(@"Parsed XML URL: %@", URL); 
    currentURL=[URL copy];; 
    tutorials= [[NSMutableArray alloc] init]; 
    settings= [[NSMutableArray alloc] init]; 
    NSURL *xmlURL=[NSURL URLWithString:URL]; 
    xmlParser =[[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [xmlParser setDelegate:self]; 
    [xmlParser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{ 
currentElement= [elementName copy]; 
    if([elementName isEqualToString:@"item"]){ 
     item=[[NSMutableDictionary alloc] init]; 
     currentTitle=[[NSMutableString alloc] init]; 
     currentImage=[[NSMutableString alloc] init]; 
     currentLink=[[NSMutableString alloc] init]; 
     currentDetails=[[NSMutableString alloc] init]; 
     } 
    if([elementName isEqualToString:@"setting"]){ 
     setting=[[NSMutableDictionary alloc] init]; 
     currentTitle=[[NSMutableString alloc] init]; 
     currentTyp=[[NSMutableString alloc] init]; 
     currentLink=[[NSMutableString alloc] init]; 
    } 

} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"item"]){ 
    NSLog(@"currenttitle: %@",currentTitle); 
     [item setObject:currentTitle forKey:@"title"]; 
     [item setObject:currentImage forKey:@"image"];  
     [item setObject:currentLink forKey:@"link"]; 
     [item setObject:currentDetails forKey:@"details"]; 
     [tutorials addObject:[item copy]]; 
    } 
    if([elementName isEqualToString:@"setting"]){ 
     NSLog(@"Currentsettingtitle: %@",currentTitle); 
     [setting setObject:currentTitle forKey:@"title"]; 
     [setting setObject:currentTyp forKey:@"typ"];  
     [setting setObject:currentLink forKey:@"link"]; 
     [settings addObject:[setting copy]]; 
    } 
} 


} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if([currentElement isEqualToString:@"title"]){ 
     [currentTitle appendString:string]; 
    } 
    if([currentElement isEqualToString:@"image"]){ 
     [currentImage appendString:string]; 
    } 
    if([currentElement isEqualToString:@"link"]){ 
     [currentLink appendString:string]; 
    } 

    if([currentElement isEqualToString:@"typ"]){ 
     [currentTyp appendString:string]; 
    } 
    if([currentElement isEqualToString:@"details"]){ 
     [currentDetails appendString:string]; 
    } 

} 
- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
    NSLog(@"Fertig mit Document"); 
    for (int i=0; i<[settings count]; i++) { 
     NSString *typ =(NSString*)[[settings objectAtIndex:i ] objectForKey:@"typ"]; 
     typ=[typ stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
     if([typ isEqualToString:@"Button1"]) 
      button1.title=(NSString*)[[settings objectAtIndex:i ] objectForKey:@"title"]; 
     if([typ isEqualToString:@"Button2"]) 
      button2.title=(NSString*)[[settings objectAtIndex:i ] objectForKey:@"title"]; 
     if([typ isEqualToString:@"Button3"]) 
      button3.title=(NSString*)[[settings objectAtIndex:i ] objectForKey:@"title"]; 
     if([typ isEqualToString:@"Titel"]) 
     navitem.title=(NSString*)[[settings objectAtIndex:i ] objectForKey:@"title"]; 
    } 
    //[[tutorials ] objectForKey:@"title"] 
    [myTableView reloadData]; 
} 

Quelqu'un a une idée?

+0

vous pouvez formater ce code afin que les gens puissent être pris la peine de le lire ... –

+0

Votre question est illisible. Vous incluez probablement trop de code, dans tous les cas. Au lieu de publier tout votre code, pouvez-vous limiter votre problème à une ou deux méthodes grâce à des approches communes de dépannage? –

Répondre

0

Voilà une poignée de code (ne peut pas éviter avec l'analyse syntaxique xml)

Mais, il semble de votre question qu'il n'y a pas de problème avec l'analyse syntaxique xml.

Alors à la place, se concentrer sur le code lié à la minuterie? Peut-être ajouter quelques logs quand il obtient réellement une nouvelle URL ?? Juste pour être sûr que vous obtenez une nouvelle demande ???

3

Vous devriez essayer d'init votre analyseur avec des données.

et obtenir vos données avec NSURLRequest et NSURLConnection:

NSURL *xmlURL=[NSURL URLWithString:URL]; 
NSURLRequest *request = [NSURLRequest requestWithURL:xmlURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0.0f]; 
xmlParser =[[NSXMLParser alloc] initWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
//etc.