Создавать и отображать разные данные после выполнения выбора ячейки в UITableView - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь добавить имя студента, нажав кнопку после выбора ячейки класса в предыдущем TableView, проблема, с которой я сталкиваюсь, например, у меня есть три класса, класс A, B, C. Затем я выбираюкласс A, чтобы создать ученика X, но затем, когда я возвращаюсь в класс B или класс C, я также вижу ученика X внутри этих классов.Я понял, что использую одни и те же данные для всех классов, но не могу это исправить.

import UIKit
import CoreData

class StudentListViewController: UIViewController, UITableViewDataSource,UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

var studentList = [StudentData]()

var student: StudentData?

override func viewDidLoad() {
    super.viewDidLoad()

    let fetchRequest: NSFetchRequest<StudentData> = StudentData.fetchRequest()

    do {
        let studentList = try PersistenceService.context.fetch(fetchRequest)
        self.studentList = studentList
        self.tableView.reloadData()
    } catch {}

}

@IBAction func addStudentTapped(_ sender: UIBarButtonItem) {
    let alert = UIAlertController(title: "Add Student", message: nil, preferredStyle: .alert)
    alert.addTextField { (studentListTF) in
        studentListTF.placeholder = "Enter name"
    }
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    let action = UIAlertAction(title: "Add", style: .default) { (_) in
        guard let student = alert.textFields?.first?.text else { return }
        print(student)
        let person = StudentData(context: PersistenceService.context)
        person.student_name = student
        PersistenceService.saveContext()
        self.studentList.append(person)
        self.tableView.reloadData()
    }
    alert.addAction(action)
    present(alert,animated: true)
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let stuCell = tableView.dequeueReusableCell(withIdentifier: "studentCell", for: indexPath)

    stuCell.textLabel?.text = studentList[indexPath.row].student_name

    return stuCell
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    guard editingStyle == .delete else {return}
    let person = studentList[indexPath.row]
    studentList.remove(at: indexPath.row)
    tableView.deleteRows(at: [indexPath], with: .fade)
    PersistenceService.context.delete(person)
    PersistenceService.saveContext()

    let fetchRequest: NSFetchRequest<StudentData> = StudentData.fetchRequest()
    do {
        let studentList = try PersistenceService.context.fetch(fetchRequest)
        self.studentList = studentList
    } catch {}
    self.tableView.reloadData()
    print("Delete \(person)")
}

}

1 Ответ

0 голосов
/ 29 ноября 2018

Я не вижу ни одной строки кода, по которой вы фильтруете класс для вашего List Student.Я думаю, что ваш класс StudentData пропускает переменную "class", чтобы показать, в каком классе находится студент. Тогда для вашего tableView у вас есть 2 варианта:

  • Получить всех студентов один раз, затем создать showArrayсохранить всех учащихся в 1 классе с помощью:

    self.showArray = studentList.filter {$ 0.class == "A"}

  • Извлечение данных по классам с помощью CoreDataNSPredicate:

    fetchRequest.predicate = NSPredicate (формат: "class =% @", "A")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...