2009-11-15 72 views
0

我開發了一個應用程序,它使用XML解析器加載指定的URL。 這個URL有時變化,每4秒就重新加載。(通過的NSTimer)XMLParser Iphone設備問題

在模擬器上它完美,但在設備上它始終是相同的(如高速緩存)

-(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]; 
} 

任何人的想法?

+0

... – 2009-11-15 10:14:03

+0

你的問題是不可讀。無論如何,你可能會包含太多的代碼。您可以通過常見的故障排除方法將您的問題縮小到一種或兩種方法,而不是發佈所有代碼? – 2009-11-15 10:28:45

回答

0

多數民衆贊成的代碼少數(不能與XML解析避免)

但是,它從你的問題似乎有與XML解析沒有問題。

那麼相反,專注於計時器相關的代碼?也許添加一些日誌,當它實際上得到一個新的URL?只是爲了確保你得到一個新的要求?

3

您應該嘗試使用數據初始化解析器。

並獲得有關的NSURLRequest和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. 
你可能想將其格式化代碼,所以人們可能會打擾閱讀它