UITableViewCell 公共功能未执行

Posted

技术标签:

【中文标题】UITableViewCell 公共功能未执行【英文标题】:UITableViewCell public function not executing 【发布时间】:2020-06-21 12:45:14 【问题描述】:
var list = [String]()
@IBOutlet weak var TableView: UITableView!

override func viewDidLoad() 
    self.title = "Routines"
    TableView.delegate = self
    TableView.dataSource = self
    super.viewDidLoad()

//refresh view when going back to this viewcontroller
override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    print("Test Worked")
    TableView.reloadData()

//generating rows
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    return (list.count)


//returning text in UITableViewCell
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
        let cell = UITableViewCell(style:
            UITableViewCell.CellStyle.default, reuseIdentifier:
        "prototype1")
        print("printed")
        cell.textLabel?.text = list[indexPath.row]
        return cell

//deleting rows
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
    
        if editingStyle == UITableViewCell.EditingStyle.delete
            deleteAllData("ToDo")
            self.list.remove(at: indexPath.row)
            TableView.reloadData()
    
    

@IBAction func didAdd() 
    
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(identifier: "addRoutinePage")as! addRoutinePage
    self.navigationController?.pushViewController(vc, animated: true)



//function to get data from core data
func getData()

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ToDo")
    request.returnsObjectsAsFaults = false
    do
        //fetching data from coredata
        let result = try context.fetch(request)
        for data in result as! [NSManagedObject]
        
            //appending the list from the value in coredata (attribute) or entity
            self.list.append(data.value(forKey: "title")as! String)
            print("append success")
        
    catch 
        print("failed")
    

我的代码有什么问题?除了 UITableViewCell 之外,一切似乎都正常工作,我输入的打印命令只是为了检查函数是否被执行,甚至没有工作。我试过 TableView.reloadData() 但它仍然没有用。从逻辑上讲,如果问题出在公共函数或数据源或委托上,它甚至不会生成任何行,但会生成行。我也尝试调整单元格高度大小,但仍然无法正常工作。请帮忙!

【问题讨论】:

viewDidLoad中添加getData()方法 您的TableView 属性应为tableView;按照惯例,属性和变量以小写字母开头,而类型以大写字母开头 【参考方案1】:

代码有一些错误:

    CoreData 提取数据完成后,您需要重新加载。
func getData() 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ToDo")
    request.returnsObjectsAsFaults = false
    do 
        let result = try context.fetch(request)
        for data in result as! [NSManagedObject] 
            self.list.append(data.value(forKey: "title")as! String)
        
        self.TableView.reloadData()
     catch 
        print(error)
    

    另外,不要忘记调用getData 函数。
override func viewDidLoad() 
    super.viewDidLoad()
    title = "Routines"
    TableView.delegate = self
    TableView.dataSource = self
    getData()

【讨论】:

核心数据不是异步的,你不应该在for循环中重新加载整个表。最好将托管对象保存在数组中并在cellForRow 中访问所需的属性,而不是仅仅存储属性。您是正确的,您需要实际调用getData 并在获取数据后重新加载表。 你是对的。但是,我不会修改他的列表数组。

以上是关于UITableViewCell 公共功能未执行的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UI 测试:UITableViewCell 上的辅助功能查询失败

调整 UITableViewCell 中的 UILabel 大小在渲染前未更新

如何从 nib 中修复此“在托管对象上调用选择器 ... 已被 GC'ed”,其中包含未使用的自定义 UITableViewCell?

UITableView 滚动后以编程方式创建的 UITableViewCell 未正确显示

UITableViewCell didSelectRowAt:按下单元格中的 UIButton 区域时未调用

SPFx JQuery Dialog 按钮单击未找到公共功能