2015-12-21 7 views
1

Я пытаюсь встроить UITableView в свой контроллер просмотра (а не TableViewController). Я не могу получить ни одну из моих данных для показа. Вот соответствующий код:Заполнение UITableView с массивом, не работающим

M файла:

@interface ViewController() <CBCentralManagerDelegate, CBPeripheralDelegate, UITableViewDelegate, UITableViewDataSource> 

@property (strong, nonatomic) IBOutlet UITableView *tableView; 
@property (strong, nonatomic) NSMutableArray  *Device_array_name; 

@end 

. . .

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 


    cell.textLabel.text=self.Device_array_name[indexPath.row]; 


    return cell; 
} 

Я также определил количество разделов и строк, и мой массив действительно имеет контент. Я довольно новичок в разработке iOS, поэтому я, несомненно, пропустил что-то.

Благодаря

+2

Является ли ваш 'numberOfRowsInSection 'метод называется? Возвращает ли оно ненулевое значение? Является ли 'tableView' не-ноль? Правильно ли установлен его 'делегат' и' dataSource'? Правильно ли установлен кадр таблицы? – rmaddy

+0

где вы выделяете и добавляете объекты в массив 'Device_array_name'? попробуйте перезагрузить таблицу после добавления данных в массив. –

ответ

6

Делегаты & источники данных должны быть определены для пользовательского интерфейса управления, чтобы назвать их соответствующих делегатов.

НАПРИМЕР: В вашей viewDidLoad функции определяют

tableView.delegate = self 
tableView.datasource = self 

Он будет работать.

0

Я думаю, вам просто нужно инициализировать делегата и DATASOURCE для Tableview собственности вашего ViewController.

1

Там может быть 4 причины (наиболее вероятно)

1> делегировании и DataSource не установлены

tableView.delegate = self 
tableView.datasource = self 

2> Ваш массив DataSource равен нулю (Device_array_name)

3> Ваши IBOutlet не связан с таблицей

4> Ваша рама для стола становится нулевой из-за автозапуска или чего-то еще (проверьте консоль во время выполнения)

0

Если вы вставляете этот путь, у вас нет настроек по умолчанию для UITableView, как у вас, когда вы используете UITableViewController напрямую. Вам нужно будет настроить его самостоятельно. Скорее всего, это потому, что вы не подключили свой объект делегирования. Второй будет, ваш UITableView невидим. Это также вызывает проблему, потому что методы делегата не будут вызываться.

0

Я думаю, перейдите в storyborad и установите делегат, источник данных там. Если вы используете storyborad.i, то надеемся, что это сработает.

http://i.stack.imgur.com/HYDDA.png

0

Вот мой список возможных проблем:

  1. @IBOutlet для представления таблицы не подключен в Interface Builder. Решение: проверить соединение в Interface Builder.
  2. Выход установлен в, но контроллер вида, размещенный в раскадровке, не относится к вашему подклассу UIViewController, но по умолчанию UIViewController. В этом случае ни один из ваших кодов не будет выполнен. Решение: указать класс контроллера вида - это инспектор идентификации (вкладка центра).
  3. Свойство представления таблицы не соответствует вашему контроллеру. Решение: Назначьте его либо в Interface Builder (раскадровка), либо программно внутри viewDidLoad() или более поздней версии.
  4. Вы не применяете метод протокола UITableviewDataSource: tableView(_:numberOfRowsInSection:) (т. Е. В представлении таблицы «думает», что он отображает 0 строк). В этом случае tableView(_:cellForRowAtIndexPath:) не будет называться (это можно сделать, поставив точку останова).Решение: Внедрите метод и верните свойство count вашего массива объектов модели.
  5. Массив, который служит источником данных для вашего вида таблицы, пуст (имеет нулевые элементы). Решение: Убедитесь, что массив содержит объекты вашей модели.

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


Добавление: Если у вас нет a compelling reason not to, я бы сильно предположить, что вы используете запас UITableViewController вместо того, чтобы вручную добавить UITableView к простому UIViewController. Вы получаете много функциональности и настройки бесплатно.

2

Установить распределение массива в вашем представлении действительно загрузилось.

Device_array_name=[NSMutableArray alloc]init]; 

Набор делегатов Tableview в viewdidLoad

tableview.delegate=self; 
tableview.datasource=self; 

После того, как дать подсчет массива в число строк в секции

return Device_array_name.count; 

В вашем методе cellForRow AtIndexpath

cell.textLabel.text=[self.Device_array_name objectAtIndex:indexPath.row]; 
Смежные вопросы