2011-07-13 9 views
-1

チュートリアルに従っていますがうまくいきましたが、2つのRSSフィードを解析したい場合は、それぞれの配列に保存する代わりに1つの配列を上書きするように見えます。2つのRSSフィードをアプリデリゲートで解析する

これは私の代表である:次いで、2を解析し

@synthesize pics; 
@synthesize books; 
として定義されている二番目の配列を使用しての最初のinsteafを上書きするように思われる、フィード1を解析する

NSURL *url2 = [[NSURL alloc] initWithString:@"myRSSFEED1"]; 
NSXMLParser *xmlParser1 = [[NSXMLParser alloc] initWithContentsOfURL:url2]; 

//Initialize the delegate. 
XMLParser1 *parser1 = [[XMLParser1 alloc] initXMLParser]; 

//Set delegate 
[xmlParser1 setDelegate:parser1]; 

//Start parsing the XML file. 
BOOL successs = [xmlParser1 parse]; 

if(successs) 
    NSLog(@"No Errors"); 
else 
    NSLog(@"Error Error Error!!!"); 
//VIDS 
NSURL *url = [[NSURL alloc] initWithString:@"MYRSSFEED2"]; 
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 

//Initialize the delegate. 
XMLParser *parser = [[XMLParser alloc] initXMLParser]; 

//Set delegate 
[xmlParser setDelegate:parser]; 

//Start parsing the XML file. 
BOOL success = [xmlParser parse]; 

if(success) 
    NSLog(@"No Errors"); 
else 
    NSLog(@"Error Error Error!!!"); 

アレイにそれを割り当てます。

そして、私のXMLParser & XMLParser1

に保存された私は、上書きからそれを停止する方法を見つけ出すことはできません。私はどこのポイントにブレークポイントを置くことをお勧めし、この上の任意のヘルプは素晴らしいだろう

- (void)parsers:(NSXMLParser *)parsers didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict { 

    if([elementName isEqualToString:@"Books"]) { 
     //Initialize the array. 
     appDelegate2.pics = [[NSMutableArray alloc] init]; 
    } 
    else if([elementName isEqualToString:@"Book"]) { 

     //Initialize the book. 
     apics = [[BookPhoto alloc] init]; 

     //Extract the attribute here. 
     apics.bookID = [[attributeDict objectForKey:@"id"] integerValue]; 

     NSLog(@"Reading HAVid value :%i", apics.bookID); 
    } 

    NSLog(@"Processing Element: %@", elementName); 
} 

- (void)parsers:(NSXMLParser *)parsers foundCharacters:(NSString *)string { 

    if(!currentElementValue) 
     currentElementValue = [[NSMutableString alloc] initWithString:string]; 
    else 
     [currentElementValue appendString:string]; 

    NSLog(@"Processing Value: %@", currentElementValue); 

} 

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

    if([elementName isEqualToString:@"Books"]) 

     return; 

    //There is nothing to do if we encounter the Books element here. 
    //If we encounter the Book element howevere, we want to add the book object to the array 
    // and release the object. 
    if([elementName isEqualToString:@"Book"]) { 
     [appDelegate2.pics addObject:apics]; 


     [apics release]; 
     apics = nil; 
    } 
    else 
     [apics setValue:currentElementValue forKey:elementName]; 

    [currentElementValue release]; 
    currentElementValue = nil; 
} 

そして、私のXMLParser.m

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict { 

    if([elementName isEqualToString:@"Books"]) { 
     //Initialize the array. 
     appDelegate.books = [[NSMutableArray alloc] init]; 
    } 
    else if([elementName isEqualToString:@"Book"]) { 

     //Initialize the book. 
     aBook = [[Book alloc] init]; 

     //Extract the attribute here. 
     aBook.bookID = [[attributeDict objectForKey:@"id"] integerValue]; 

     NSLog(@"Reading id value :%i", aBook.bookID); 
    } 

    NSLog(@"Processing Element: %@", elementName); 
} 

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

    if(!currentElementValue) 
     currentElementValue = [[NSMutableString alloc] initWithString:string]; 
    else 
     [currentElementValue appendString:string]; 

    NSLog(@"Processing Value: %@", currentElementValue); 

} 

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

    if([elementName isEqualToString:@"Books"]) 
     return; 

    //There is nothing to do if we encounter the Books element here. 
    //If we encounter the Book element howevere, we want to add the book object to the array 
    // and release the object. 
    if([elementName isEqualToString:@"Book"]) { 
     [appDelegate.books addObject:aBook]; 

     [aBook release]; 
     aBook = nil; 
    } 
    else 
     [aBook setValue:currentElementValue forKey:elementName]; 

    [currentElementValue release]; 
    currentElementValue = nil; 
} 

+0

カントーヘルプは? –

+0

2番目のフィードを処理する部分をデリゲートに表示すると便利です。 – sosborn

+0

@Chris Greggそれだけの本の配列に保存するようだ写真 –

答えて

0

私の悪い

は、私は、パーサーに余分のSさんが持っていたようです:

- (void)parsers:(NSXMLParser *)parsers foundCharacters:(NSString *)string { 

    if(!currentElementValue) 
     currentElementValue = [[NSMutableString alloc] initWithString:string]; 
    else 
     [currentElementValue appendString:string]; 

    NSLog(@"Processing Value: %@", currentElementValue); 

} 

はされている必要があります。

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

    if(!currentElementValue) 
     currentElementValue = [[NSMutableString alloc] initWithString:string]; 
    else 
     [currentElementValue appendString:string]; 

    NSLog(@"Processing Value: %@", currentElementValue); 

} 

歓声配列が上書きなっている

0

:ここ

はあまりにも私のXMLParsersです配列がロードされず、(1)それが呼び出されたかどうか、(2)配列にデータをまったく保存しているかどうかが分かります。

関連する問題