UITableView刷新崩溃

时间:2013-01-17 22:44:39

标签: iphone ios xcode uitableview timer

我有一个UITableView,可以从Twitter搜索中获取JSON数据。我正在使用轮询来自动刷新视图。

在我的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秒,应用程序就会崩溃。如果我不滚动,它更新就好了。有谁知道为什么?

3 个答案:

答案 0 :(得分:1)

在更新数据时尝试[self.tableView beginUpdates];[self.tableView endUpdates];。此外,您无需重置数据源并始终委派。您甚至可以致电[self.tableView reloadData];

答案 1 :(得分:1)

假设array是表视图数据源使用的数据,那么问题是您在连接开始时更改了数组的内容。然后在后台完成连接时更新内容。同时,当表格滚动时,它仍然试图访问数组的旧内容。

一种解决方案是设置用于处理新连接的临时数组。在您在桌面上调用reloadData之前,请不要使用新数组更新旧数组。

答案 2 :(得分:0)

您可以在刷新前禁用触摸表视图,然后在设置数据后启用。

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