我正在Swift中编写iOS应用程序。在iOS的tableView中插入新行
每次页面加载时,都会从服务器获取电影列表,并将该列表填入tableView
。
我编写了从静态库(Objective-C)中的服务器获取JSON的代码,并且通过通知设计模式接收json到应用程序。
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ReceivedNListOfMoviesNotification(_:)), name: Notification.Name(VUSDK.basicNotificationName()), object: nil)
requestForData()
}
func ReceivedNListOfMoviesNotification(_ notification:NSNotification)
{
if let info = notification.userInfo {
basicArray=info["Search"] as! [Any]
if basicArray.count>0 {
tableView.beginUpdates()
self.tableView.insertRows(at: [IndexPath.init(row: self.basicArray.count-1, section: 0)], with: .automatic)
tableView.endUpdates()
}
}
}
但应用程序崩溃:
***断言失败 - [UITableView的_endCellAnimationsWithContext:],/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit- 3600.7.47/UITableView.m:1737 2017-04-23 13:49:12.562 VUDemo [4835:164247] ***由于未捕获异常'NSInternalInconsistencyException',原因:'无效更新:无效的行数部分0.更新(10)后,现有节中包含的行数必须等于更新前该节中包含的行数(0),加上或减去(插入1个,删除0个),加上或减去移入或移出该部分的行数(0移入,0移出)。
你在哪里添加数据源数组中的相应项目?您有**第一个**将项插入到数据源数组中,然后**然后**插入该行。 Btw:删除'begin-/endUpdates'行。他们没有效果。 – vadian
basicArray = info [“Search”] as! [Any] –
在这种情况下,不要调用'insert ...'。改为调用'tableView.reloadData()'。 – vadian