2013-03-01 4 views
1

Код ниже загружает данные в UITableView, получая RSS-ленту новостей Google, анализируя XML и помещая его в представление. Он работает, но когда я нажимаю другой вид и возвращаюсь, прокрутка в виде таблицы нарушена. Я выделил проблему для кода GCD. Если я удалю его, проблема исчезнет. Так вот код НОД:Загрузка данных в UITableview с использованием GCD

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSLog(@"View did load .."); 
    self.title = @"News stories"; 

    NewsItem *item = [[NewsItem alloc] init]; 
    item.title = @"Loading ..."; 

    self.newsItems = [@[item] mutableCopy]; 
    NSString *URL = @"http://news.google.com/news?q=apple+OR+google+OR+microsoft&output=rss"; 
    NSURL *xmlURL = [NSURL URLWithString:URL]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:xmlURL]; 
    Parser *parser = [[Parser alloc] initXMLParser];; 

    dispatch_queue_t downloadQueue = dispatch_queue_create("news downloader", NULL); 

    dispatch_async(downloadQueue, ^{ 
     BOOL success; 
     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

     if (data != nil) { 

      NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data]; 

     // create and init our delegate 


     // set delegate 
      [nsXmlParser setDelegate:parser]; 

     // parsing... 
      success = [nsXmlParser parse]; 
     } 

     else { 
      success = FALSE; 
     } 
     // test the result 
     dispatch_async(dispatch_get_main_queue(), ^{ 
     if (success) { 

       NSLog(@"reloading data ..."); 
       self.newsItems = [parser.newsItems copy]; 
       [self.tableView reloadData]; 

     } else { 
       NewsItem *item = [[NewsItem alloc] init]; 
       item.title = @"Error loading"; 

       self.newsItems = [@[item] mutableCopy]; 
       [self.tableView reloadData]; 


      NSLog(@"Error parsing document!"); 
     } 

     }); 


    }); 



} 
+0

Что значит «свиток сломан»? – Mundi

+0

он прокручивается только частично .. его трудно описать .. он закручивает табличный вид, и он доцент прокручивается с края экрана, если я нажимаю другой контроллер вида и выскакиваю назад. если я удалю вызовы GCD, это произойдет. –

ответ

2

Попробуйте [self.tableView reloadData]; в viewDidAppear.

+0

это решило проблему !!!! как это возможно ??? –

+1

Когда вы покидаете представление таблицы с динамическим контентом, состояние, в котором вы его находите, когда вы возвращаетесь, не определено. «viewDidAppear» - это, помимо прочего, для этой цели. – Mundi

+0

спасибо .. ты мужчина !! не знал этого. где я могу прочитать этот материал (какой яблочный гид)? –

Смежные вопросы