0

Twitter検索からJSONデータを取得するUITableViewがあります。ビューを自動更新するためにポーリングを使用しています。

私のviewDidLoadには、次のものがあります。

[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(autoTweets:) userInfo:nil repeats:YES];

そして私は持っています:

-(void) autoTweets : (NSTimer *)theTweets
{
    NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json?q=%23hatlive%20-%22RT%20%40%22"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    connection = [NSURLConnection connectionWithRequest:request delegate:self];


    if (connection)
    {
        webData = [[NSMutableData alloc] init];
    }

    [[self myTableView]setDelegate:self];
    [[self myTableView]setDataSource:self];
    array = [[NSMutableArray alloc] init];
}

これを行うと、10秒ごとにデータが更新されます。問題は、コードが実行されたときに10秒スクロールすると、アプリがクラッシュすることです。スクロールしないと、問題なく更新されます。誰かが理由を知っていますか?

4

3 に答える 3

1

[self.tableView beginUpdates];データを更新し[self.tableView endUpdates];ながら試してみてください。また、データソースをリセットして常に委任する必要はありません。と呼ぶこともできます[self.tableView reloadData];

于 2013-01-17T22:49:30.550 に答える
1

arrayテーブルビューのデータソースによって使用されるデータであると仮定すると、問題は、接続の開始時に配列の内容を変更することです。その後、バックグラウンドで接続が完了すると、コンテンツが更新されます。その間、テーブルがスクロールしている間、それはまだ配列の古い内容にアクセスしようとしています。

1つの解決策は、新しい接続を処理するために使用される一時的な配列をセットアップすることです。reloadDataテーブルを呼び出す直前まで、古い配列を新しい配列で更新しないでください。

于 2013-01-17T22:49:40.360 に答える
0

更新の直前にテーブルビューのタッチを無効にし、データが設定された後に有効にすることができます。

self.myTableView.userInteractionEnabled = YES; // before refresh
self.myTableView.userInteractionEnabled = NO;  // after 
于 2016-04-29T16:22:36.213 に答える