YogevSitton
YogevSitton

Reputation: 10108

RSS Read using NSXMLParser not working

I'm trying to write and RSS reader for a wordpress blog. My news element class looks likes this:

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *link;
@property (nonatomic, retain) NSString *pubDate;

I want to creat and NSMutableArray of NewsElements. The XMLParser class looks like this:

XMLParser.h

@class NewsElement;

@interface XMLParser : NSObject
{
    BOOL storingCharacters;
}

@property (nonatomic, retain) NewsElement *newsElement;
@property (nonatomic, retain) NSMutableArray *newsFeed;
@property (nonatomic, retain) NSMutableString *currentElementValue;

-(XMLParser*) initXMLParser;


@end

XMLParser.m

#import "XMLParser.h"
#import "NewsElement.h"

@implementation XMLParser

@synthesize newsElement, newsFeed, currentElementValue;


-(XMLParser*)initXMLParser{
    newsFeed = [[NSMutableArray alloc] init];

    return self;
}

-(void)parser:(NSXMLParser*)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    if([elementName isEqualToString:@"item"])
    {
        newsElement = [[NewsElement alloc] init];
    }
    else if ([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"description"] || [elementName isEqualToString:@"link"] || [elementName isEqualToString:@"pubDate"])
    {
        [currentElementValue setString:@""];
        storingCharacters = YES;
    }
}

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string{
    if(storingCharacters)
        [currentElementValue appendString:string];
}

-(void)parser:(NSXMLParser*)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"item"])
    {
        if([newsFeed description] != nil)
        {
            [newsFeed addObject:newsElement];

        }
    }
    else if ([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"description"] || [elementName isEqualToString:@"link"] || [elementName isEqualToString:@"pubDate"])
    {
        [newsElement setValue:currentElementValue forKey:elementName];
        storingCharacters = NO;
    }
}

@end

When the parser finishes I have an array with 5 elements like it should - but all of the values (title, description etc...) are nil... Using the debugger I can see I do set values with real data.

What am I missing?

Upvotes: 0

Views: 262

Answers (1)

NJones
NJones

Reputation: 27147

You need to instantiate your NSMutableString, you are calling appendString: on a nil.

-(XMLParser*)initXMLParser{
    self = [super init];
    if (self){
        newsFeed = [[NSMutableArray alloc] init];
        currentElementValue = [[NSMutableString alloc] init];
    }
    return self;
}

Upvotes: 1

Related Questions