2013-08-14 3 views
4

Я знаю, что этот вопрос - это другие места в stackoverflow, но ни одно из этих решений не сработало для меня. У меня есть две вкладки с табличными представлениями, в которых я хочу использовать один и тот же источник данных. Контроллер представления первой вкладки является подклассом UITableViewController. Второй - простой UIViewController с его табличным представлением, установленным в IB. Я первоначально настроил инициализатор контроллера представления, чтобы взять источник данных в качестве аргумента, но так как это было так сильно, я попытался упростить ситуацию, просто выделив его в моем контроллере представления. У меня есть таблица Вид и источник данных установлен следующим образом:Как установить источник данных UITableView в коде

@property (weak, nonatomic) IBOutlet UITableView *tableView; //Connected in IB 
@property (strong, nonatomic) TableViewDataSource *data; 

Моя программа всегда падает, когда я: [self.tableView setDataSource: data]; Я пытался положить эту линию в методе viewDidLoad, но моя программа по-прежнему падает. Вот мой viewDidLoad метод:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    data = [TableViewDataSource new]; //My data source object 
    NSLog(@"%@", data); //This isn't null, it says TableViewDataSource and then some address 
    [self.tableView setDataSource:data]; 

} 

Мой первый контроллер вид работает отлично. Он также загружает данные, поэтому я не верю, что допустил ошибку в своем объекте источника данных. Но каждый раз, когда я нажимаю на вторую вкладку, программа вылетает немедленно. Однако это не сбой, если я не упоминаю инструкцию назначения источника данных.

Вот авария:

2013-08-14 12:56:57.313 iPlanner[961:c07] *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:5471 
2013-08-14 12:56:57.314 iPlanner[961:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 
*** First throw call stack: 
(0x1ca2012 0x10dfe7e 0x1ca1e78 0xb75665 0xd9c1b 0x6e40c 0xd9a7b 0xde919 0xde9cf 0xc71bb 0xd7b4b 0x742dd 0x10f36b0 0x229efc0 0x229333c 0x2293150 0x22110bc 0x2212227 0x22b4b50 0x39edf 0x1c6aafe 0x1c6aa3d 0x1c487c2 0x1c47f44 0x1c47e1b 0x1bfc7e3 0x1bfc668 0x23ffc 0x298d 0x28b5) 
libc++abi.dylib: terminate called throwing an exception 
(lldb) 
+2

* Что такое * сбой? также, как выглядит код для вашего объекта «TableViewDataSource»? Есть ли у вас необходимые методы протокола источника данных? –

+0

Сообщает ли вам сообщение об ошибке? –

+0

Да, у меня есть правильный метод источника данных. Я знаю, что это работает, потому что первый контроллер представления использует тот же объект и отлично работает – Iowa15

ответ

5
'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 

Это то, что вызывает приложение к краху. Что-то в логике вашего метода tableView:cellForRowAtIndexPath не возвращает UITableViewCell. В этом сообщении журнала указано все - A UITableViewCell должен быть возвращен с tableView:cellForRowAtIndexPath:.

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