较小的 JSON 响应后更新 UITableView 时出错?
Posted
技术标签:
【中文标题】较小的 JSON 响应后更新 UITableView 时出错?【英文标题】:Error updating UITableView after smaller sized JSON response? 【发布时间】:2016-02-22 15:06:25 【问题描述】:目前,我的应用程序访问了我的端点,并取回了 10 个或更少的项目。如果返回的项目少于 10 个,而 UITableView
已经显示 10 个项目,reloadData()
将导致错误,因为大小与上次不同。现在,当我收到回复时,我所做的就是:
tableView.beginUpdates()
self.items = items //where self.items is the array that backs the UITableView, and items are the items I got back in form of JSON from the server.
tableView.reloadData()
tableView.endUpdates()
【问题讨论】:
【参考方案1】:为什么会报错?如果您使用的是 tableView.reloadData(),则不需要调用 endUpdates() 和 beginUpdates()。只需简单地分配项目并重新加载 tableView 数据。
self.items = items
tableView.reloadData()
如果您在后台线程上,请在主队列中调用上述代码。
dispatch_async(dispatch_get_main_queue()) () -> Void in
// Code runs on main queue!
【讨论】:
谢谢,我相信就是这样。我认为 beginUpdate 和 endUpdate 是必需的。【参考方案2】:不是您调用 reloadData 导致错误。这是因为您的 numberOfRowsInSection 或 numberOfSectionsInTableView 在您更新模型后没有返回正确的值。
【讨论】:
但就是这样,父控制器(因为我从我定义的基类扩展了这个 tableView)有:``` override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int if (noPrediction) return 1; noPrediction = false return self.items.count ``` 所以我很困惑为什么它会失败。另外,我不知道为什么这个代码块没有格式化>:( 尝试删除 tableView.beginUpdate() 和 tableView.endUpdate() @Hassan Rafique Awan 说可能会有所帮助。【参考方案3】:在表格视图方法中,
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
你应该写成 , return [self.items count];
这样,您的表格将知道您的表格需要显示多少项,并且重新加载数据不会报错。
【讨论】:
以上是关于较小的 JSON 响应后更新 UITableView 时出错?的主要内容,如果未能解决你的问题,请参考以下文章