Удаление ячейки с ошибкой и аварийным завершением работы приложения - PullRequest
0 голосов
/ 06 августа 2020

Мне нужна помощь, чтобы выяснить, почему я получаю эту ошибку. В настоящее время у меня есть контроллер представления (назовем его ADDPersonV C), добавляющий структуру. Структура выглядит следующим образом:

import UIKit

struct Person {
    var Name: String?
    var PostNumber: String?
    var StoryNumber: String?
    var Compensation: String?
    var ProfileImageUrl: String?
}

У меня есть кнопка в ADDPersonV C, которая добавляет ярлыки во второй контроллер представления (назовем это рассмотрениеTestV C) tableViewCell. Количество строк определяется следующим образом:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    return ConsiderationsTestViewController.people.count
}

Код addPersonButton, который добавляет структуру c, выглядит так:

@IBAction func addButtonTapped(_ sender: Any) {
    
    ConsiderationsTestViewController.people.append(Person(Name: "\(nameTextField.text!)", PostNumber: "\(gridTextField.text!)", StoryNumber: "\(storyTextField.text!)", Compensation: "\(compensationTextField.text!)", ProfileImageUrl: "\(userProfileImageUrlLabel.text!)"))
    
    self.navigationController?.popViewController(animated: true)
    
    DispatchQueue.main.async {
       NotificationCenter.default.post(name: NSNotification.Name(rawValue: "load"), object: nil)
            }
}

В соображенияхTestViewController у меня есть stati c var, называемая люди, которые выглядят так:

static var people: [Person] = []

Затем я могу добавить метки в ConsulerationsTestViewContoller со следующим кодом:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: AddPersonCell, for: indexPath) as! ConsiderationsCell
    
    let numberOfPeopleCells = ConsiderationsTestViewController.people[indexPath.row]
    
    
    cell.nameLabelC.text = numberOfPeopleCells.Name
    cell.feedLabelC.text = numberOfPeopleCells.PostNumber
    cell.storyLabelC.text = numberOfPeopleCells.StoryNumber
    cell.compensationLabelC.text = numberOfPeopleCells.Compensation
    cell.userImage.loadImageUsingCacheWithUrlString(urlString: numberOfPeopleCells.ProfileImageUrl!)
    
    cell.userImage.layer.cornerRadius = 25
    
    cell.nameLabelC.numberOfLines = 0
    
    return cell
}

Когда я go удаляю ячейку, я используя код:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == .delete) {
        
        ConsiderationsTestViewController.people.remove(at: indexPath.row)
        // handle delete (by removing the data from your array and updating the tableview)
    }
}

Когда я скользну по ячейке и нажимаю «Удалить», я получаю сообщение об ошибке:

 "Thread 1: Fatal error: Index out of range"

в строке:

ConsiderationsTestViewController.people.remove(at: indexPath.row)

Я исследовал это всю неделю и хотел бы получить помощь в попытке решить эту проблему. Я счастлив, что могу заставить структуру работать как массив и правильно отображать правильную информацию. У меня также возникла проблема с загрузкой его в Firebase - realtimeDatabase, но это вопрос после того, как я это выясню.

Я ценю всю помощь.

EDIT:

Когда я запускаю точку останова на функции удаления и получаю значения, она возвращает:

3 elements
 ▿ 0 : Person
 ▿ Name : Optional<String>
  - some : "Person's Name1"
 ▿ PostNumber : Optional<String>
  - some : "1"
 ▿ StoryNumber : Optional<String>
  - some : "1"
 ▿ Compensation : Optional<String>
  - some : "1"
 ▿ ProfileImageUrl : Optional<String>
  - some : "PROFILEIMAGE URL HERE"
 ▿ userID : Optional<String>
  - some : "B2Z4DlZ8RucvEQhz2NSUkquqc5P2"

 ▿ 1 : Person
 ▿ Name : Optional<String>
  - some : "Person's Name2"
 ▿ PostNumber : Optional<String>
  - some : "1"
 ▿ StoryNumber : Optional<String>
  - some : "11"
 ▿ Compensation : Optional<String>
  - some : "1"
 ▿ ProfileImageUrl : Optional<String>
  - some : "PROFILEIMAGE URL HERE"
 ▿ userID : Optional<String>
  - some : "Lbn9HL1WIpZTMFzpGWAXy7Ra0EA2"

 ▿ 2 : Person
 ▿ Name : Optional<String>
  - some : "Person's Name3"
 ▿ PostNumber : Optional<String>
  - some : "1"
 ▿ StoryNumber : Optional<String>
  - some : "1"
 ▿ Compensation : Optional<String>
  - some : "1"
 ▿ ProfileImageUrl : Optional<String>
  - some : "PROFILEIMAGE URL HERE"
 ▿ userID : Optional<String>
  - some : "NE6WVUfF6WQjJT9eeVSJgfvrrZW2"

Я тоже пробовал это:

 po ConsiderationsTestViewController.people[indexPath.row]

Я получил следующее:

 Fatal error: Index out of range: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.13/swift/stdlib/public/core/ContiguousArrayBuffer.swift, line 444
  2020-08-06 11:14:34.945249-0700 BWM[10260:384634] Fatal error: Index out of range: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.13/swift/stdlib/public/core/ContiguousArrayBuffer.swift, line 444

1 Ответ

0 голосов
/ 06 августа 2020

Мне нужно было добавить следующий код в мою функцию удаления: «

tableView.deleteRows(at: [indexPath], with: .fade)
...