Как анализировать данные с веб-сайта, используя NSXMLParser - PullRequest
1 голос
/ 03 ноября 2011

Я хочу получать обновления с веб-сайта на основе заголовков и ссылок в формате xml.

Я пробовал с кодом ниже, но он не работает.В консоли отображается сообщение:

2011-11-03 14: 45: 05.987 tabbar [673: e903] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException»,причина: '- [NSCFString isEqualtostring:]: нераспознанный селектор, отправленный экземпляру 0x5746830'

При повторном запуске представление таблицы загружается, но в ячейках таблицы нет данных.

Это сообщение отображается в строке if ([elementName isEqualtostring:@"item"]):

Программа получила сигнал SIGABRT

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    classelement = elementName;
    if ([elementName isEqualtostring:@"item"])
    {
        itemselected = YES;
        multitle = [[NSMutableString alloc]init];
        mullink = [[NSMutableString alloc]init];
    }
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedname:(NSString *)qName
{
    if ([elementName isEqualToString:@"item"])
    {
        itemselected = NO;
        [titlearray addObject:multitle];
        [linkarray addObject:mullink];
        [multitle release];
        [mullink release];

        [self.tbl reloadData];
    }
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (itemselected)
    {
        if ([classelement isEqualToString:@"title"]) 
        {
            NSLog(@"%@",string);
            [multitle appendString:multitle];
        }
        else if([classelement isEqualToString:@"link"])
        {
            [multitle appendString:string];
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 27 ноября 2011

Наконец я понял.Я взял два NSMutableArray s и два NSMutableString s, и я добавил элементы к строкам, а затем те строки, которые я добавил к двум массивам.

(void)viewDidLoad
{

    titlearray = [[NSMutableArray alloc]init];
    linkarray = [[NSMutableArray alloc]init];

    NSString *rssaddress =@"http://www.greenday.com/rss";
    NSURL *url = [NSURL URLWithString:rssaddress];
    xmlparser = [[NSXMLParser alloc]initWithContentsOfURL:url];
    [xmlparser setDelegate:self];
    [xmlparser parse];


    [super viewDidLoad];
}

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

    classelement = elementName;



    if([elementName isEqualToString:@"item" ])
    {
        itemselected = YES;
        titlestrng = [[NSMutableString alloc]init];
        linkstrng = [[NSMutableString alloc]init];

    }

}

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

    if([elementName isEqualToString:@"item" ])
    {
        itemselected = NO;
        [titlearray addObject:titlestrng];
        [linkarray addObject:linkstrng];


        [titlestrng release];
        [linkstrng release];


        [self.tb reloadData];
    }
}


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

    if(itemselected)
    {
        if([classelement isEqualToString:@"title"])
        {
            [titlestrng appendString: string];
                    NSLog(@"%@",titlestrng);
        }

        else if ([classelement isEqualToString:@"link"])
        {
            [linkstrng appendString:string];
            NSLog(@"%@",linkstrng);

        }
    }
}
0 голосов
/ 03 ноября 2011

Если вы читаете напрямую с веб-сайта, скорее всего, вы получаете «недопустимые» символы. Как только анализатор увидит эти недопустимые символы, он вылетит. Я бы посоветовал посмотреть на использование "HPPLE Parser". Он работает намного лучше и не вылетает, если в него входят недопустимые символы.

Hpple информация здесь: http://blog.objectgraph.com/index.php/2010/02/24/parsing-html-iphone-development/

...