重新加载表视图数据,现有数据可见
Posted
技术标签:
【中文标题】重新加载表视图数据,现有数据可见【英文标题】:Reload Table View Data, With Existing Data Visible 【发布时间】:2013-08-06 08:03:11 【问题描述】:我正在使用通过 AFNetworking 获取和解析 JSON 的标准方法,然后将数据用于填充表格视图。
NSURL *url = [NSURL URLWithString:serverURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json)
[refresh endRefreshing];
self.results = [json valueForKeyPath:@"data"];
[self.tableView reloadData];
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
[refresh endRefreshing];
];
[self.tableView reloadData];
[operation start];
它的方式是,每次用户拉动刷新整个表格视图时都会消失,并且会在大约一秒钟后加载新数据然后呈现给用户。但是,我希望表中的数据保留在那里,直到新数据可用并加载。所以我注释掉了[self.tableView reloadData];
,认为这可以让它工作,虽然在最初的几秒钟内可以看到它确实可以工作,但是应用程序很快就会崩溃。出现错误:
由于未捕获的异常“NSRangeException”而终止应用程序,原因: '* -[__NSArrayI objectAtIndex:]: 索引 1 超出范围为空 数组'
现在我什至不完全确定这是做这件事的正确方法,所以基本上,我的问题是如何将数据保留在表格视图中,直到加载新数据,或者将现有数据下推表格视图,有点像 Facebook 和 Twitter 应用程序在您刷新新闻提要/时间线时所做的。
更新
我试过这个方法:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.results count] inSection:0];
NSArray *indexArray = [NSArray arrayWithObjects:indexPath, nil];
[self.tableView insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationAutomatic];
但我收到以下错误:
由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'尝试插入第 15 行 进入第 0 节,但在第 0 节之后只有 15 行 更新”
【问题讨论】:
【参考方案1】:在您的成功块中,您必须首先检查您是否正在获取数据。如果有任何数据,则使用新数据重新加载您的 tableview,否则您不应尝试更改现有数据。试试这个。
NSArray *tempResults = [json valueForKeyPath:@"data"];
if(tempResults && [tempResults count] > 0)
self.results = tempResults;
[self.tableView reloadData];
在 tempResults 上设置一个断点,看看你得到了什么数据。
【讨论】:
感谢您的回答,但这并不能真正回答问题。我正在尝试在现有数据之上添加新数据,而不是简单地用新数据重新加载表。以上是关于重新加载表视图数据,现有数据可见的主要内容,如果未能解决你的问题,请参考以下文章