0

私はワードプレスのブログのためにRSSリーダーを書こうとしています。私のニュース要素クラスは次のようになります。

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

NewsElementsのNSMutableArrayを作成したいと思います。XMLParserクラスは次のようになります。

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

パーサーが終了すると、5つの要素を含む配列が作成されますが、すべての値(タイトル、説明など)はnilです...デバッガーを使用すると、実際のデータで値を設定していることがわかります。

私は何が欠けていますか?

4

1 に答える 1

1

あなたはあなたをインスタンス化する必要があります、あなたはnilNSMutableStringを呼んでいます。appendString:

-(XMLParser*)initXMLParser{
    self = [super init];
    if (self){
        newsFeed = [[NSMutableArray alloc] init];
        currentElementValue = [[NSMutableString alloc] init];
    }
    return self;
}
于 2012-09-09T04:51:35.413 に答える