0

RaptureXML を使用して各項目を取得し、テーブル セル内に表示する XML パーサーがあります。タイトルと説明はすでに取得できていますが、日付を取得する方法がわかりません。

これが私がこれまでにデートのために持っているものです:

NSString* dateString;

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEEE MMMM d, YYYY"];
dateString = [formatter stringFromDate:self.pubDate];


[articleAbstract appendAttributedString:
 [[NSAttributedString alloc] initWithString: dateString]
 ];

デバッガーにこれが表示され続けます:

'NSInvalidArgumentException', reason: 'NSConcreteAttributedString initWithString:: nil value'

何が間違っているのかわかりません。完全なコードは次のとおりです。

RSSItem.h

#import <Foundation/Foundation.h>

@interface RSSItem : NSObject

@property (strong, nonatomic) NSString* title;
@property (strong, nonatomic) NSString* description;
@property (strong, nonatomic) NSURL* link;
@property (strong, nonatomic) NSAttributedString* cellMessage;
@property (strong, nonatomic) NSDate* pubDate;
@property (strong, nonatomic) NSString* dateString;

@end

RSSItem.m

#import "RSSItem.h"
#import "GTMNSString+HTML.h"

@implementation RSSItem

-(NSAttributedString*)cellMessage

{ if (_cellMessage!=nil) return _cellMessage;

NSDictionary* boldStyle = @{NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:16.0]};
NSDictionary* normalStyle = @{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:16.0]};

NSMutableAttributedString* articleAbstract = [[NSMutableAttributedString alloc] initWithString:self.title];

[articleAbstract setAttributes:boldStyle
                         range:NSMakeRange(0, self.title.length)];


[articleAbstract appendAttributedString:
 [[NSAttributedString alloc] initWithString:@"\n\n"]
 ];

// Parse for date

NSString* dateString;

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEEE MMMM d, YYYY"];
dateString = [formatter stringFromDate:self.pubDate];


[articleAbstract appendAttributedString:
 [[NSAttributedString alloc] initWithString: dateString]
 ];

[articleAbstract appendAttributedString:
 [[NSAttributedString alloc] initWithString:@"\n\n"]
 ];

int startIndex = [articleAbstract length];

NSString* description = [NSString stringWithFormat:@"%@...", [self.description substringToIndex:100]];
description = [description gtm_stringByUnescapingFromHTML];

[articleAbstract appendAttributedString:
 [[NSAttributedString alloc] initWithString: description]
 ];

[articleAbstract setAttributes:normalStyle
                         range:NSMakeRange(startIndex, articleAbstract.length - startIndex)];

_cellMessage = articleAbstract;
return _cellMessage;

}

@end

編集:ここに私のRSSローダーがあります

#import "RSSItem.h"

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

@implementation RSSLoader

-(void)fetchRssWithURL:(NSURL*)url complete:(RSSLoaderCompleteBlock)c
{
dispatch_async(kBgQueue, ^{

    //work in the background
    RXMLElement *rss = [RXMLElement elementFromURL: url];
    RXMLElement* title = [[rss child:@"channel"] child:@"title"];        
    RXMLElement* pubDate = [[rss child:@"channel"] child:@"pubDate"];

    NSString *usableDate = [pubDate];       

    NSArray* items = [[rss child:@"channel"] children:@"item"];

    NSMutableArray* result = [NSMutableArray arrayWithCapacity:items.count];

    //more code
    for (RXMLElement *e in items) {

        //iterate over the articles
        RSSItem* item = [[RSSItem alloc] init];
        item.title = [[e child:@"title"] text];            
        item.pubDate = usableDate
        item.description = [[e child:@"description"] text];
        item.link = [NSURL URLWithString: [[e child:@"link"] text]];
        [result addObject: item];
    }

    c([title text], result);
});

}

誰かが私の日付を正しく解析するのを手伝ってくれませんか?

4

3 に答える 3

2

stringFromDate が nil を返すようです。

YYYY が年であることを意味している場合、それは正しくありません。代わりに yyyy を使用する必要があります。しかし、日付形式の問題ではないと思います。多分pubDateはnilですか?

于 2012-11-25T23:55:54.740 に答える
1

質問に追加したコードに基づいて、問題はpubDateプロパティの設定方法に関係しています。プロパティを に定義しましたが、RSS ローダー コードでプロパティに値をNSDate設定しました。NSString

XML ファイルから取得した文字列を NSDate に変換するか、pubDateプロパティを からNSDateに変更する必要がありますNSString。後者を行う場合、この変更を反映するために以前のコードを更新する必要があります。

決定は、日付で何をする必要があるかによって異なります。

于 2012-11-26T00:18:08.153 に答える