1

以下のコードは、Google ニュースの RSS フィードを取得して XML を解析し、それをビューに入れることによって、データを UITableView に読み込みます。動作しますが、別のビューをプッシュして戻ってくると、テーブル ビューのスクロールが壊れます。問題を GCD コードに切り分けました。削除すると、問題はなくなります。したがって、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!");
        }

        });


    });



}
4

1 に答える 1

2

で試してみて[self.tableView reloadData];くださいviewDidAppear

于 2013-03-01T13:20:21.757 に答える