У меня есть отдельный класс из UIViewController, настроенный как мой делегат UITableView и мой UITableViewDataSource.Некоторые методы делегата UITableView называются 5 раз, другие вообще не вызываются
Я пытаюсь инициализировать класс UITableViewDelegate и назначать его UITableView.
Вот что странно ...
методы numberOfSectionsInTableView и Tableview (: numberOfRowsInSection) называются пять раз, в то время как Tableview (_: cellForRowAtIndexPath) никогда не вызывается.
Я проверил как номерOfSectionsInTableView, так и tableView (: numberOfRowsInSection) возвращает значения как минимум одного.
Если я перемещаю методы UITableViewDataSource и UITableViewDelegate в ViewController, код работает правильно.
В чем причина этого поведения?
class MessagesViewController: UIViewController, ManagedObjectContextSettable {
var managedObjectContext: NSManagedObjectContext!
@IBOutlet var messagesTableView: UITableView!
override func viewDidLoad() {
setupMessagesTableView()
}
private func setupMessagesTableView() {
let dataSource = MessagesTableViewDataSource(managedObjectContext: managedObjectContext, conversationList: fetchedObjects as! [Conversation])
// Assume fetchedObjects is an array fetched from CoreData store. I have removed the code that defines it for the purpose of this example.
self.messagesTableView.dataSource = dataSource
self.messagesTableView.delegate = dataSource
}
}
class MessagesTableViewDataSource: NSObject, UITableViewDataSource, UITableViewDelegate {
var managedObjectContext: NSManagedObjectContext!
var conversationList: [Conversation]
required init(managedObjectContext: NSManagedObjectContext, conversationList: [Conversation]) {
self.managedObjectContext = managedObjectContext
self.conversationList = conversationList
let conversation = Conversation()
self.conversationList.append(conversation)
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.conversationList.count }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CellID", forIndexPath: indexPath) as UITableViewCell!
let conversation: Conversation = self.conversationList[indexPath.row]
cell.textLabel!.text = conversation.name as? String
return cell
}
}
Убедитесь, что self.conversationList.count выше нуля. –
Может ли быть, что dialogList заполняется фоновым потоком и не заполняется во время отображения таблицыView, и в этом случае счетчик будет равен нулю? – Michael
Я добавляю экземпляр в список обсуждения в функцию init класса DataSource, чтобы избежать этой проблемы. Я проверил значение chatList.count, чтобы убедиться, что он равен 1. – Kory