Проблемы с соединением метод TableView для источника данных.XIB
Поэтому я пытаюсь подключить компонент tableView к UIViewController, созданному через .пользовательский интерфейс xib. Я получаю классическую -[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x1f544cb0
и предполагаю, что я подключил что-то неправильно или делаю что-то, что я не должен делать с построителем интерфейса. Я искал google и Stack overflow и нашел похожие вопросы, но не с ответами, которые помогли моей ситуации. Я бьюсь головой, пытаясь понять это, и надеюсь, что кто-то здесь сможет помощь. Я всегда делал это только через раскадровку или с помощью .xib, когда контроллер был UITableViewController. Обычно я просто использую UITableViewController, но мне может потребоваться добавить панель инструментов в нижней части представления, так что эта опция не жизнеспособна. Вот шаги, которые я предпринял, чтобы создать класс, пожалуйста, дайте мне знать, если я делаю что-то неправильно
Я сначала создаю файл с XIB для пользовательского интерфейса:
Затем я добавляю компонент табличного представления в XIB:
В LeftMenuViewController.h я добавляю следующую строку кода, чтобы сообщить разрешить классу использоваться в качестве UITableViewDelegate и UITableViewDataSource:
@interface LeftMenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
Затем я подключаю компонент табличного представления к делегату и источнику данных путем перетаскивания элемента управления из компонента в заголовок владельца файла и выбора делегата и источника данных, как можно видеть:
Затем я добавляю следующие строки кода к LeftMenuViewController.м для определения необходимого метода TableView делегат методы:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 5;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 48;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
return cell;
}
Этот процесс приводит к тому, что приложение создает исключение NSInvalidArgumentException, которое приводит к ошибке [UIViewController tableView:numberOfRowsInSection:]: unrecognized selector
. Что я делаю не так? Все, что я пробовал или что мне рекомендовали, не сработало.
3 ответа:
Тот факт, что ошибка ссылается на
UIViewController
в вашем сообщении об ошибке,[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector
, это означает, что владелец файла не был установлен (он должен ссылаться на ваш подкласс контроллера вида, а не на самUIViewController
). Вы правильно указали делегат и источник данных в своем наконечнике, поэтому мне интересно, как вы создали экземпляр контроллера вида.Вы должны были создать его с помощью чего-то вроде:
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; [self presentViewController:controller animated:YES completion:nil];
Или, если имя наконечника не совпадает с именем контроллера:
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"MyNibName" bundle:nil]; [self presentViewController:controller animated:YES completion:nil];