2013-01-17 153 views
0

我有一個UITableView從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秒滾動,應用程序就會崩潰。如果我不滾動,它會更新得很好。有誰知道爲什麼?

+0

你可以發佈委託實現嗎?它在哪裏崩潰?你使用多線程? –

回答

1

假設array是表視圖的數據源使用的數據,那麼問題是您在連接開始時更改數組的內容。然後內容在連接在後臺完成時得到更新。同時,當表滾動時,它仍然嘗試訪問數組中的舊內容。

一個解決方案是設置一個用於處理新連接的臨時數組。在表格中調用reloadData之前,不要使用新陣列更新舊陣列。

+0

修復它。謝謝! – Stickerbox

1

嘗試[self.tableView beginUpdates];[self.tableView endUpdates];,同時更新您的數據。此外,您不必重置數據源並始終進行委派。你甚至可以撥打[self.tableView reloadData];

0

您可以在刷新之前禁用表視圖上的觸摸,然後在數據設置後啓用。

self.myTableView.userInteractionEnabled = YES; // before refresh 
self.myTableView.userInteractionEnabled = NO; // after