2016-12-14 3 views
0

Swift 3Свифт: Утверждение отказа при нажатии кнопки нажала

У меня есть вид таблицы с несколькими строками, каждая строка имеет кнопку (использует indexPath.row), когда кнопка нажата она перемещает строку из раздела 1 (testArray) до раздела 0 (followArray). НО, если вы используете панель поиска для поиска через testArray, и нажата кнопка строки, она сработает.

Теперь при использовании панели поиска, testArray фильтруется в новый массив называется filteredArray. Предполагается, что кнопка перемещает строку от отфильтрованногоArray до followArray.

Без поиска кнопка работает по назначению, она срабатывает только при использовании панели поиска.

Что я делаю неправильно?

Вот ERROR я получаю:

CustomCellSwift[1473:391841] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3600.5.2/UITableView.m:1315 

Новое предложение: Может иметь ничего общего с этим возникает проблема с indexPath.row из testArray и followedArray когда filteredArray заменяет вид таблицы?

Deleting from UISearchController's filtered search results

код я использую:

@IBAction func followButtonClick(_ sender: UIButton!) { 

    // Adding row to tag 
    let buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView) 
    if let indexPath = self.myTableView.indexPathForRow(at: buttonPosition) { 

     // Change Follow to Following 
     (sender as UIButton).setImage(UIImage(named: "follow.png")!, for: .normal) 
     cell.followButton.isHidden = true 
     cell.followedButton.isHidden = false 

     // Checking wether to import from testArray or filteredArray to followedArray 
     if !(searchController.isActive && searchController.searchBar.text != "") { 

      self.myTableView.beginUpdates() 

      // ----- Inserting Cell to followedArray ----- 
      followedArray.insert(testArray[indexPath.row], at: 0) 
      myTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade) 

      // ----- Removing Cell from testArray ----- 
      testArray.remove(at: indexPath.row) 
      let rowToRemove = indexPath.row 
      self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: .fade) 

      self.myTableView.endUpdates() 

     } 
     else { 

      self.myTableView.beginUpdates() 

      // ----- Inserting Cell to followedArray ----- 
      followedArray.insert(filteredArray[indexPath.row], at: 0) 
      myTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade) 

      // ----- Removing Cell from filteredArray ----- 
      filteredArray.remove(at: indexPath.row) 
      let rowToRemove = indexPath.row 
      self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 0)], with: .fade) 

      self.myTableView.endUpdates() 

     } 
    } 
} 

ответ

0

Так что я нашел ответ, я добавляла объект в массив, используя вставку в методе секций вместо используя только вставку, так как у меня есть только 1 секция.

let testObject: Test = filteredArray[indexPath.row] 
let indexOfObjectInArray = testArray.index(of: testObject) 
followedArray.insert(testObject, at: 0) 
Смежные вопросы