Разбор 2 RSS-каналов в приложении делегата - PullRequest
0 голосов
/ 14 июля 2011

Я следую учебному пособию, и оно работает нормально, но если я хочу проанализировать 2 RSS-канала, кажется, что он перезаписывает один массив, а не сохраняет их в соответствующих массивах.

Это у меня в делегате:

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!!!"); 

, который анализирует канал 1, выделяет его массиву, затем анализирует 2 и, кажется, перезаписывает первый этап использования второго массива, определенного как

@synthesize pics;
@synthesize books;

И сохранено в моем XMLParser & XMLParser1

Я не могу понять, как остановить перезапись.

Вот и мои XMLParsers:

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

Любая помощь в этом была бы блестящей,

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

мой плохой

, кажется, у меня были дополнительные 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 голосов
/ 14 июля 2011

Я предлагаю поместить точку останова в точку, где массив не загружается, и посмотреть, если (1) он даже вызывается, и (2), сохраняет ли он данные в массив вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...