用数组填充 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
不是零吗?它的delegate
和dataSource
设置是否正确?表格视图的框架设置是否正确?
您在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 属性的 delegate 和 dataSource 初始化到 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章