получить coredata в ячейке табличного представления (swift4) - PullRequest
0 голосов
/ 26 июня 2018

Код ниже вызывает coredata и печатает строку в метке.

@IBOutlet var displayL: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()
    user = coreDataHandler.getSortedData()
    for i in user! {
        displayL.text = String("\(displayL.text ?? "")\nCourse: \(i.username!) Score: \(i.password!)")

    }}

Это работает, и я хочу перенести его в ячейку таблицы, но то, что у меня сейчас, не работает.Ничего даже не появляется в таблице.Мой код таблицы ниже.Я просто хочу взять ячейку uitableview и отобразить запись для каждой ячейки.

     import UIKit
import CoreData


class allScoresViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate {


@IBOutlet var tazbleView : UITableView!
var itemsName : [NSManagedObject] = []
var textFieldz : UITextField!

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

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let appD = UIApplication.shared.delegate as! AppDelegate

    let context = appD.persistentContainer.viewContext

    let FetchRequest = NSFetchRequest<NSManagedObject>(entityName: "User")


    do {
        itemsName = try context.fetch(FetchRequest)
    }catch {
        print("Ashley Tisdale")
    }
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete {
        let appD = UIApplication.shared.delegate as! AppDelegate
        let context = appD.persistentContainer.viewContext
        context.delete(itemsName[indexPath.row])
        itemsName.remove(at: indexPath.row)
        do {
            try context.save()
        }
        catch {
            print("Jessica Alba")
        }
        self.tazbleView.reloadData()


    }
}


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

    let user = itemsName[indexPath.row]
    cell.textLabel?.text = ("\nCourse: \(user.username!) Score: \(user.password!)")

    return cell

}
}

1 Ответ

0 голосов
/ 26 июня 2018

Я предполагаю, что, поскольку вы выбираете свои пользовательские объекты в viewDidAppear, это то, что вы хотите использовать, а не coreDataHandle.getSortedData().

Измените объявление itemsName на

var itemsName: [User] = []

и tableView:cellForRowAt:

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

    let user = itemsName[indexPath.row] 
    cell.textLabel?.text = ("\nCourse: \(user.username!) Score: \(user.password!)")

    return cell
}

Обновление

Возможно, вы также хотите обновить объявление свойства запроса на выборку в viewDidAppear

let fetchRequest = NSFetchRequest<User>()
...