このエラーが発生するのはなぜですか?何をする必要がありますか?
*-[UITableView _endCellAnimationsWithContext:]、/ BuildRoot/Library/Caches/com.Apple.xbs/Sources/UIKit/UIKit-3600.8.1/UITableView.m:1442 2017-のアサーションエラー07-06 20:25:30.736267-0400 BlogApp [1482:340583] *キャッチされない例外 'NSInternalInconsistencyException'が原因でアプリを終了します。理由: '含まれているセクション0から行0を削除しようとしています更新前の0行 '
クラッシュはこちら
_// ----- Inserting Cell to followedArray -----
let blogObject: Blog = filteredArray[indexPath.section][indexPath.row]
let indexOfObjectInArray = mainArray.index(of: blogObject)
followedArray.insert(blogObject, at: 0)
// ----- Removing Cell from filteredArray -----
filteredArray.remove(at: [indexPath.section][indexPath.row])
mainArray.remove(at: indexOfObjectInArray!)
let rowToRemove = indexPath.row
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 0)], with: .fade)
self.myTableView.endUpdates()
_
配列の配列var filteredArray = [[Blog]]()
を使用したことがないので、正しくアクセスしたり削除したりしていないのかもしれません。
私が抱えていたSearchBarの問題の修正について投稿したばかりでしたが、試してみたところ、このクラッシュに遭遇しました。オブジェクトを検索するときに[フォロー]ボタンをクリックすると発生します。私はSearchBarコードに慣れていないので、私の理解を超えています。
FilteredArrayからセルを削除するときに問題が発生しています。セルに正しくアクセスできないため、セルを削除できませんか?行ごとにブレークポイントを設定しましたが、filteredArrayからセルを削除するとクラッシュします
また、私はSearchBarに一般的な問題があり、新しいコードを取得したので、これが役立つかもしれません。
Swift:SearchBarで両方のセクションを検索し、それらを結合しない
その他の情報については、お知らせください。ありがとうございます。
_// Follow Button
@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 mainArray or filteredArray to followedArray
if !(searchController.isActive && searchController.searchBar.text != "") {
self.myTableView.beginUpdates()
// Save identifier into followedIdentifier array
self.followedIdentifiers.insert(mainArray[indexPath.row].blogID)
// ----- Inserting Cell to followedArray -----
followedArray.insert(mainArray[indexPath.row], at: 0)
myTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
// ----- Removing Cell from mainArray -----
mainArray.remove(at: indexPath.row)
let rowToRemove = indexPath.row
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: .fade)
self.myTableView.endUpdates()
// After Updating Table, Save the Archived Data to File Manager
saveData()
}
else { // **** Crash in this section ****
self.myTableView.beginUpdates()
// Remove identifier into followedIdentifier array
self.followedIdentifiers.remove(followedArray[indexPath.row].blogID)
// ----- Inserting Cell to followedArray -----
let blogObject: Blog = filteredArray[indexPath.section][indexPath.row]
let indexOfObjectInArray = mainArray.index(of: blogObject)
followedArray.insert(blogObject, at: 0)
//------------------------
// CRASH SHOULD BE HERE (breakpoints lead me here)
//------------------------
// ----- Removing Cell from filteredArray -----
filteredArray.remove(at: [indexPath.section][indexPath.row])
mainArray.remove(at: indexOfObjectInArray!)
let rowToRemove = indexPath.row
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 0)], with: .fade)
self.myTableView.endUpdates()
// After Updating Table, Save the Archived Data to File Manager
saveData()
}
}
}
_
私のコードの残りの部分は、おそらく問題の修正に役立ちます
_var mainArray = [Blog]()
var followedArray = [Blog]()
var filteredArray = [[Blog]]()
// Number of Rows in Section
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if !(searchController.isActive && searchController.searchBar.text != "") {
if section == 0 {
return followedArray.count
} else {
return mainArray.count
}
} else {
return filteredArray[section].count
}
}
// CellForRowAt indexPath
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let CellIdentifier = "Cell"
var cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier) as! CustomCell
if cell != cell {
cell = CustomCell(style: UITableViewCellStyle.default, reuseIdentifier: CellIdentifier)
}
// Configuring the cell
var blogObject: Blog
if !(searchController.isActive && searchController.searchBar.text != "") {
if indexPath.section == 0 {
blogObject = followedArray[indexPath.row]
cell.populateCell(blogObject, isFollowed: true, indexPath: indexPath, parentView: self)
} else {
blogObject = mainArray[indexPath.row]
cell.populateCell(blogObject, isFollowed: false, indexPath: indexPath, parentView: self)
}
} else {
blogObject = filteredArray[indexPath.section][indexPath.row]
cell.populateCell(blogObject, isFollowed: false, indexPath: indexPath, parentView: self)
}
return cell
}
_
フォロー解除ボタンのコード
[フォロー]ボタンの反対と同じ問題がここにあるはずです。
_// Unfollow Button
@IBAction func followedButtonClick(_ 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 Following to Follow
(sender as UIButton).setImage(UIImage(named: "followed.png")!, for: .normal)
cell.followButton.isHidden = false
cell.followedButton.isHidden = true
self.myTableView.beginUpdates()
// Remove identifier into followedIdentifier array
self.followedIdentifiers.remove(followedArray[indexPath.row].blogID)
// ----- Inserting Cell to mainArray -----
mainArray.insert(followedArray[indexPath.row], at: 0)
myTableView.insertRows(at: [IndexPath(row: 0, section: 1)], with: .fade)
// ----- Removing Cell from followedArray -----
followedArray.remove(at: indexPath.row)
let rowToRemove = indexPath.row
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 0)], with: .fade)
self.myTableView.endUpdates()
// After Updating Table, Save the Archived Data to File Manager
saveData()
}
}
_
最初にTableViewからセルを削除する必要があります!
// ----- Removing Cell from filteredArray -----
self.myTableView.deleteRows(at: [indexPath], with: .fade)
filteredArray.remove(at: [indexPath.section][indexPath.row])
mainArray.remove(at: indexOfObjectInArray!)
やってみて。