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