Почему я должен объявлять пользовательский объект dataSource как хранимое свойство? - PullRequest
0 голосов
/ 16 января 2019

Я использую пользовательский объект dataSource для моего tableView:

class MyDataSource: NSObject, UITableViewDataSource {
  // ...
}

Отлично работает в этом коде:

class ViewController: UIViewController {
  @IBOutlet weak var tableView: UITableView! 
  // Declare as stored property
  let dataSource = MyDataSource()

  override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = dataSource
  }
}

Но tableView ничего не показывает (= MyDataSource метод не вызван) в этом коде:

class ViewController: UIViewController {
  @IBOutlet weak var tableView: UITableView! 

  override func viewDidLoad() {
    super.viewDidLoad()

    // Declare as local variable
    let dataSource = MyDataSource()
    tableView.dataSource = dataSource
  }
}

Мои вопросы:

  • Почему я должен объявить MyDataSource как хранимое свойство?
  • Если я использую локальную переменную, когда мой tableView теряет источник данных?

1 Ответ

0 голосов
/ 16 января 2019

Проблема в том, что если вы объявите константу источника данных в viewDidLoad, в вашем табличном представлении будет ссылка на ваш пользовательский источник данных, пока выполняется код внутри этого метода. Поэтому, когда возвращается viewDidLoad, источник данных теряется.

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