По какой-то причине функция tableload reloadData вызывается, несмотря на то, что функция cellForRowAtIndexPath не вызывается. Я разместил полный код ниже. В двух словах, используя видео в качестве источника данных, каждый раз, когда изменяются значения видео, таблица перезагружает свои данные. Я подтвердил, что эта часть функциональности работает так, как я ее отлаживал, и количество видео выводится каждый раз, когда происходит эта функция. Несмотря на это, cellForRowAtIndexPath не может быть вызван даже один раз.UITAbleview Cell для строки в указателе не указан
import Foundation
import UIKit
import ReactiveCocoa
import enum Result.NoError
public typealias NoError = Result.NoError
public class VideosTable: UITableView, UITableViewDataSource, UITableViewDelegate {
// MARK: Public variables
public var currentVideo: Video!
// MARK: Private variables
private let videos = MutableProperty<[Video]?>(nil)
private let cellId = "cell"
// MARK Initializers
public required init(signal: Signal<[Video]?, NoError>, frame: CGRect) {
super.init(frame: frame, style: .Plain)
self.dataSource = self
self.delegate = self
self.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellId)
videos <~ signal
videos.signal.observeNext{_ in
self.reloadData()
}
}
videos <~ signal
videos.signal.observeNext{_ in
print("values changed")
self.reloadData()
}
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
// MARK: DataSource
public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let videoCount = videos.value?.count ?? 0
print("Video Count: \(videoCount)")
return videoCount
}
public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.dequeueReusableCellWithIdentifier(cellId) ?? UITableViewCell()
cell.textLabel?.text = videos.value![indexPath.row].title
return cell
}
public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 60.0
}
// MARK: Delegate
public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("User selected row at \(indexPath.row)")
currentVideo = videos.value![indexPath.row]
}
}
Вместо этого вы должны использовать контроллер (таблицы), чтобы обращаться с такими вещами. Если вам нужно, найдите некоторые обучающие материалы MVC. – Eendje
На самом деле я использую TableViewController, который содержит таблицу, а именно эту внутри одной из своих ячеек. –