在iOS中的tableView中插入新行

时间:2017-04-23 08:25:20

标签: ios swift uitableview

我正在Swift中编写一个iOS应用程序。

每当页面加载时,它都会从服务器获取电影列表,并将该列表填充到tableView

我编写了在静态库(Objective-C)中从服务器获取JSON的代码,并通过Notification设计模式接收json到app。

  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()
        }
      }
   }

但是app崩溃了:

  

***断言失败 - [UITableView _endCellAnimationsWithContext:],/ BuildRoot / Library / Cache / com.apple.xbs / Source / 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移出)。'

1 个答案:

答案 0 :(得分:1)

替换

   if basicArray.count>0 {
        tableView.beginUpdates()

        self.tableView.insertRows(at: [IndexPath.init(row: self.basicArray.count-1, section: 0)], with: .automatic)

        tableView.endUpdates()
   }

   if !basicArray.isEmpty {
       tableView.reloadData()
   }

因为您要覆盖整个数组而不是添加单个项目。