较小的 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 时出错?的主要内容,如果未能解决你的问题,请参考以下文章

如何使应用程序响应其他较小的分辨率。我使用过媒体查询,但效果不佳

将一个大的 json 文件拆分为多个较小的文件

使用 Arduino 解码较大的 DES 数据失败

iOS 定位服务在后台以较小的间隔或距离发生

Google Swiffy,响应式设计,高度

C# System.Drawing.Graphics 画图后,如何保存一个低质量的图片,一个占用空间较小的图片