Почему метод cellForRowAt не вызывается - PullRequest
0 голосов
/ 21 марта 2020

-> Я взял класс, который является потомком NSObject в этом классе. Я создал объект tableView.

-> Методы numberOfRowsInSection и cellForRowAt находятся в одном классе

-> Я даже назначил объект того же класса свойству dataSource & делегат

Так что моя проблема в том, что вызывается numberOfRowsInSection, но не вызывается cellForRowAt. Я просто получаю tableView без какой-либо ячейки.

-> Я проверил, что numberOfRowsInSection не возвращает 0

Пожалуйста, проверьте код ниже:

Это класс что я создал. Я создаю объект этого класса в дочернем классе UIViewController

ПРИМЕЧАНИЕ: -

1) Я вызвал функцию configureTV () в методе init. В этом configureTV () я назначил оба свойства dataSource и делегат его значение.

2) Я проверил, что вызывается метод configureTV ()

3) Я проверил, что я регистрирую reuseId для ячейки

4) У меня есть проверил, что свойству dataSource присвоена ссылка или объект класса успешно

5) Я проверил, что вызываются методы numberOfRows & numberOfSection. Даже я пробовал эти два метода с жестко закодированными значениями

import UIKit

class MyClass:NSObject,UITableViewDataSource,UITableViewDelegate
{


    var superView:UIView!

    var tableView:UITableView = UITableView()

    let value = ["A","B","C","D","E","F"]

    override init()
    {
        super.init()
    }

    convenience init(superView:UIView)
    {

        self.init()
        self.superView = superView
        self.configureTV()
        print("SuperView Initialized")
    }




    func configureTV()
    {
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "c")
        self.tableView.dataSource = self
        self.tableView.delegate = self


        self.tableView.frame = self.superView.frame
        self.superView.addSubview(self.tableView)

    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {

        print(value.count)
        return value.count
    }

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


        let cell = tableView.dequeueReusableCell(withIdentifier: "c", for: indexPath)



        cell.backgroundColor = .green

        cell.textLabel?.text = value[indexPath.row]

        return cell
    }



}






//-------Creating The Object Of The Above Class------------



class ABCD:UIViewController
{
    override func viewDidLoad()
    {


        let obj = MyClass(superView: self.view)

    }





}

---------------------------- I Есть решение -------------------------

Я нашел решение самостоятельно, но решение очень странное.

Внутри класса ABCD я создал объект, как показано ниже

// Код до исправления: -

class ABCD:UIViewController
{
    override func viewDidLoad()
    {


        let obj = MyClass(superView: self.view)

    }

}

Теперь я сделал очень незначительное изменение, т.е. Я сделал переменную «obj» как свойство класса и проблема была решена.

// Код после исправления, который решил проблему: -

class ABCD:UIViewController
{
    var obj:MyClass!
    override func viewDidLoad()
    {


        obj = MyClass(superView: self.view)

    }





}

Я хочу знать, почему это произошло.

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