在 tableview 单元格中获取 coredata (swift4)

Posted

技术标签:

【中文标题】在 tableview 单元格中获取 coredata (swift4)【英文标题】:fetch coredata in tableview cell (swift4) 【发布时间】:2018-06-26 03:12:12 【问题描述】:

下面的代码调用 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!)")

    

这行得通,我想将其转移到 tableview 单元格,但我现在所拥有的不起作用。表格视图中甚至没有显示任何内容。我的表格视图代码如下。我只想获取 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】:

我假设由于您在 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>()

【讨论】:

我根据您的上述建议编辑了我的代码。但是我仍然收到此错误“NSManagedObject”类型的值没有成员“用户名”。感谢您的帮助。 您是否将数组 itemsName 更改为 User 类型?

以上是关于在 tableview 单元格中获取 coredata (swift4)的主要内容,如果未能解决你的问题,请参考以下文章

从 Tableview 单元格中获取超过一个 TextField 的值?

如何使用 Swift 从 tableview 单元格中获取数据而不显示在标签上?

将远程图像加载到 Tableview 单元格中

如何在 Tableview 单元格中获取 UIButton 的位置,并在 Swift 中添加目标?

如何从单元格中的按钮操作获取 tableview 中的 indexPath?

在单元格中单击时,tableView:indexPathForCell 返回 nil