2016-01-27 3 views
0

У меня есть табличное представление, которое должно иметь свои свойства делегирования и источника данных, заданные из InsertIntoTableViewDelegate и InsertIntoTableViewDatasource классов соответственно. Однако мой класс InsertIntoTableViewDatasource всегда возвращает null.Класс, реализующий UITableViewDataSource, всегда равен нулю

Вот код:

class InsertIntoTableViewDatasource: NSObject,UITableViewDataSource { 

    var data:NSMutableArray 

    init(With data: NSMutableArray){ 
     self.data = data 
    } 


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return data.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("rowCell", forIndexPath: indexPath) 
     cell.textLabel?.text = data[indexPath.row] as? String 
     return cell 
    } 
} 

Вот как TableView создается:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.title = "Testing" 
    tableView.dataSource = InsertIntoTableViewDatasource(With: data) 
    tableView.delegate = InsertIntoTableViewDelegate() 
} 

Почему это так?

ответ

2

UITableView не сохраняет свой источник данных, поэтому ваш источник данных освобождается, как только заканчивается ваша функция viewDidLoad.

Вам необходимо сохранить ссылку на свой источник данных как свойство в вашем контроллере вида. То же самое с делегатом.

+0

Из любопытства вы знаете, почему оно не хранит его источник данных? – user481610

+0

Его общий способ сделать сам контроллер представления источником данных, так что вы получите цикл сохранения из контроллера вида и таблицы, сохраняя друг друга. По той же причине объекты обычно не сохраняют своих делегатов. – dan

Смежные вопросы