Делегат NSXmlparser не работает? - PullRequest
0 голосов
/ 28 ноября 2011

Файл XMLParser работает отдельно, но когда я помещаю его в свой проект, я не сталкиваюсь с какой-либо ошибкой, но не могу получить данные из URL.Я полагаю, мой setDelegate не работает. Мой xmlpar и функции печати работают, но другие не работают. Я не знаю, в чем дело? Кто-нибудь может мне помочь ??

мой файл .h

    #import <UIKit/UIKit.h>

@interface TestttxmlViewController : UIViewController <NSXMLParserDelegate>{
    NSXMLParser * pars;
    NSString * durum;
    NSMutableArray *arr;
}
-(void)print;
-(void)xmlpar;
@end

-> мой .m файл

  #import "TestttxmlViewController.h"
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self xmlpar];
}


-(void)xmlpar{
    arr=[[NSMutableArray alloc]init];
    NSURL * url =[[NSURL alloc]initWithString:@"http://www.milliyet.com.tr/D/rss/rss/Rss_36.xml"];
    pars=[[NSXMLParser alloc]initWithContentsOfURL:url];
    durum=[[NSString alloc]init];
    [pars setDelegate:self];
    [pars parse];
    [self print];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict  {
    if ([elementName isEqualToString:@"title"]) {
        durum=elementName;
    }
}
-(void)print{
    NSLog(@"%@",arr);
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    durum=@"";

}


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string  
{
    if ([durum isEqualToString:@"title"]) {
        [arr addObject:string];
    }
   }

@end

1 Ответ

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

Это может быть диким предположением, так как я не использовал NSXMLParser, но я бы подумал, что он анализируется в фоновом потоке. Это будет означать, что он может еще не завершить синтаксический анализ, и вы уже вызываете метод для печати содержимого arr.

-(void)xmlpar{
    //..
    [pars parse];
    [self print];
}

попробуйте вызвать метод print в методе делегата, который вызывается по завершении анализа, если таковой существует.

EDIT

После просмотра документов попробуйте вызвать print в parserDidEndDocument method

- (void)parserDidEndDocument:(NSXMLParser *)parser{
    [self print];
}
...