-1

Я пытаюсь повторно использовать ячейку, созданную в моей раскадровке,Непризнанный селектор направлен например, при создании ячейки

Я использую этот код:

MyTableView * mytableview; 

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
mytableview = [sb instantiateViewControllerWithIdentifier:@"myTable"]; 


AlertCell *cell; 

cell = [mytableview.tableView dequeueReusableCellWithIdentifier:@"alertCell"]; 
cell.message.text = @"some text"; 

return cell; 

Я получаю эту ошибку:

[__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance 0xe02b7d0 

эта линия в конечном счете, генерирует ошибку:

[mytableview.tableView dequeueReusableCellWithIdentifier:@"alertCell"]; 
  • Представление таблицы при использовании ячейки запрограммировано.
  • Все, что мне нужно! но я все равно получил ошибки в журнале

Большое спасибо!

+0

Я не уверен, что ошибка, которую вы видите, находится в этом коде. 'objectForKeyedSubscript' - это метод в NSDictionary, обычно используемый для индексированных ссылок (т. е. myDict [@" key "]). 'NSArray' имеет аналогичный метод' objectAtIndexedSubscript' (myArray [3]). Вы уверены, что эта ошибка не вызвана, возможно, назначением массива тому, что ожидает словарь? –

ответ

1

Вы не можете создать представление таблицы при создании ячейки.

Вы должны создать представление таблицы в методе, который я назвал, когда создан контроллер вида, например viewDidLoad.

Затем в методе ячейки используйте указатель tableView, который включен в этот метод.

Кроме того, ошибка также указывает на проблему с вашим источником данных.

Существует так много очевидных пробелов в знаниях, возможно, лучший способ - прочитать через Table View Programming Guide.

+0

Вы * можете * создать * a * таблицу, когда ячейка создана, но вы не должны *. Мне кажется, что OP загружает какой-либо другой контроллер вида с другой таблицей, чтобы создать новую ячейку, которая в лучшем случае кажется очень неэффективной. – Caleb

0

Я не совсем понял, когда вы создаете таблицу. Вы не должны создавать экземпляр одновременно. Почему вам нужно было позвонить по этой линии?

mytableview = [sb instantiateViewControllerWithIdentifier:@"myTable"]; 

Если вы хотите использовать TableView, просто создайте его, как правило, и добавить его в свой ViewController вместо использования выше строки кода в viewDidLoad.

UITableView *tableView = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain]; 
tableView.rowHeight = 45; 
[self.view addSubview:tableView]; 
tableView.delegate = self; 
tableView.datasource = self; 

Внедрение методов представления данных в виде таблицы и делегата. И в cellForRowAtIndexPath::

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"newFriendCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"newFriendCell"]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 
//do your stuff 
return cell; 
} 

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

  • Нет связанных вопросов^_^