用数组填充 UITableView 不起作用

Posted

技术标签:

【中文标题】用数组填充 UITableView 不起作用【英文标题】:Populate UITableView with Array not working 【发布时间】:2015-12-21 05:03:56 【问题描述】:

我正在尝试在我的视图控制器(不是 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 开发还很陌生,所以毫无疑问我错过了一些东西。

谢谢

【问题讨论】:

你的numberOfRowsInSection方法被调用了吗?它是否返回非零值? tableView 不是零吗?它的delegatedataSource 设置是否正确?表格视图的框架设置是否正确? 您在Device_array_name 数组中分配和添加对象的位置?请在数组中添加数据后尝试重新加载表格。 【参考方案1】:

应为 UI 控件定义委托和数据源,以便调用它们各自的委托。

例如:在您的viewDidLoad 函数中定义

tableView.delegate = self
tableView.datasource = self

它会起作用的。

【讨论】:

【参考方案2】:

在你的视图中设置数组分配确实加载了。

Device_array_name=[NSMutableArray alloc]init];

在 viewdidLoad 中设置 tableview 委托

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

在节中的行数中给出数组的计数

return Device_array_name.count;

在你的 cellForRow AtIndexpath 方法中

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

【讨论】:

【参考方案3】:

可能有 4 个原因(很可能)

1> 你的委托和数据源没有设置

tableView.delegate = self
tableView.datasource = self

2> 你的数据源数组是 nil (Device_array_name)

3> 你的 IBOutlet 没有连接到 tableview

4> 由于自动布局或其他原因,您的 tableview 框架变为零(在运行时检查控制台)

【讨论】:

【参考方案4】:

我认为您只需将 tableView 属性的 delegatedataSource 初始化到 ViewController。

【讨论】:

【参考方案5】:

如果您以这种方式嵌入,则不会像直接使用 UITableViewController 时那样拥有 UITableView 的默认设置。您需要自行设置。很可能是因为您没有连接您的委托对象。其次,您的UITableView 是不可见的。这也会导致问题,因为不会调用委托方法。

【讨论】:

【参考方案6】:

我想去 storyborad 并在那里设置委托,数据源。如果你使用 storyborad。我希望会起作用。

【讨论】:

【参考方案7】:

这是我的可能问题列表:

    表视图的@IBOutlet 未在 Interface Builder 中连接。 解决方案:在 Interface Builder 中检查连接。 出口设置,但故事板中放置的视图控制器不是您自定义的UIViewController 子类,而是默认的UIViewController。在这种情况下,您的任何代码都不会被执行。 解决方案:指定视图控制器的类是身份检查器(中心选项卡)。 表格视图的dataSource 属性未设置为您的视图控制器。 解决方案: 在 Interface Builder(故事板)中分配它,或者在 viewDidLoad() 或更高版本中以编程方式分配它。 您没有实现UITableviewDataSource 协议方法: tableView(_:numberOfRowsInSection:)(即,表视图“认为”它有 0 行要显示)。在这种情况下,tableView(_:cellForRowAtIndexPath:) 将不会被调用(可以通过放置断点来确认)。 解决方案: 实现该方法并返回 count 的属性你的模型对象数组。 用作表格视图数据源的数组为空(元素为零)。 解决方案:确保数组包含您的模型对象。

我可能遗漏了一些其他常见错误...请告诉我。


附录:除非您有a compelling reason not to,否则我强烈建议您使用股票UITableViewController,而不是手动将UITableView 添加到普通@ 987654333@。您可以免费获得很多功能和设置。

【讨论】:

以上是关于用数组填充 UITableView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

uitableview 填充同样在模拟器中不起作用

用“零”填充数组-memset()不起作用-[关闭]

用数组的内容填充表格视图不起作用

需要使用 std::string 用 const char* 填充数组,但它不起作用(我认为它正在存储指针)?

多维动态数组,为啥不起作用?

UITableView ScrollToRowAtIndexPath 方法不起作用