将 customTableView 添加到未正确加载 json 数据的视图上

Posted

技术标签:

【中文标题】将 customTableView 添加到未正确加载 json 数据的视图上【英文标题】:Adding a customTableView onto a view not loading json data properly 【发布时间】:2014-05-06 22:54:58 【问题描述】:

在 viewController 中,我想将我的 VoidTableView 呈现/addSubview 到我的 viewController 上。我在 ViewDidLoad 中使用以下代码将其添加到 viewController 中,它确实相应地出现在我的 viewController 上,但不加载数据。

// VoidTableView
VoidTableView *controllerVoid;
UITableView *voidTableView ;

controllerVoid = [[VoidTableView alloc]init];
voidTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 222, 481, 400)];
voidTableView.delegate = controllerVoid;
voidTableView.dataSource = controllerVoid; 

在我的 VoidTableView.m 文件中,我有一个使用 webAPI 检索 json 数据并将其保存到 _dataarray 的方法。我正在获取数据,但它没有显示在表格上。当我为 numberOfRows 返回一个整数而不是 _dataarray.count 时,表会加载但带有(空)值。当我返回 _dataarray.count 时,表似乎根本没有加载。我想我错过了将数组加载到 cellForRowAtIndexPath 方法中的关键步骤。有人可以帮忙吗?

编辑:_dataarray 是在 VoidTableView.h 中声明的 NSArray 属性。我的表格视图代码如下,我在 VoidTableView.m 中有一个方法 loadSalesHistory,它将所有数据保存到 _dataarray 中。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

return 1;

即使数据被保存到 _dataarray 中,计数仍然显示为 0。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

NSLog(@"////// %lu",(unsigned long)_dataarray.count); // is 0
return [_dataarray count];
//  return 3;

CellForRowAtIndex 应该是大多数人编写它的标准。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewCell *cell ;
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

if (cell == nil)


UILabel *cusdata = [[UILabel alloc] initWithFrame:CGRectMake(05, 10, 300, cell.bounds.size.height)];
NSString *datestr = [[_dataarray objectAtIndex:indexPath.row] valueForKey:@"Date"];
NSString *timestr = [[_dataarray objectAtIndex:indexPath.row] valueForKey:@"Time"];

NSString *amountstr = [[_dataarray objectAtIndex:indexPath.row] valueForKey:@"SoldAmount"];
amountstr = [NSString stringWithFormat:@"$%@",amountstr];
NSNumber *pointsstr = [[_dataarray objectAtIndex:indexPath.row] valueForKey:@"Points"];
UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(230, 12, 70, 40)];
UILabel *label3 = [[UILabel alloc] initWithFrame:CGRectMake(370, 12, 70, 40)];
label2.textAlignment = NSTextAlignmentCenter ;
label3.textAlignment = NSTextAlignmentCenter ;
label2.text = amountstr ;
label3.text = [NSString stringWithFormat:@"%@",pointsstr] ;
[cell.contentView addSubview:label2];
[cell.contentView addSubview:label3] ;

NSString *cusdatastr = [NSString stringWithFormat:@"%@         %@    ",datestr,timestr];
[cell.contentView addSubview:cusdata];
cusdata.text = cusdatastr ;

return cell;



- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

return 60 ;

我还在 VoidViewTable 的 ViewDidLoad 中放置了一个 NSLog,但即使我加载了表格,它也不会出现。这可能是问题吗?

【问题讨论】:

您多次提到_dataarray,您是否会让我们所有人都对它是什么以及在您的代码中使用它的位置感到悬念? @MartinH 抱歉,我已经更新了我的帖子 您的帖子中仍然没有任何内容,只有几行。使用表格视图,您必须实现几种方法。他们在哪里? 你现在被否决了很多,也许最好删除这个问题并用更多的代码开始一个新问题,人们不会因为投反对票而看到这个问题 " 计数仍然表明它是 0。"那么你需要找出原因。没有数据就无法显示 【参考方案1】:

首先,永远不要向单元格的内容视图添加内容,除非您执行逻辑检查是否已将对象添加到子视图。 Look here for an example.

二,关注Retterdesdialog的回答,将[tablewView reloadData];放入收到json响应时调用的方法中,比如NSURLConnection的didReceiveResponse:委托方法。

您还需要在 viewDidLoad 或 viewWillAppear 中将表格视图添加到新创建的视图的子视图中。

【讨论】:

以上是关于将 customTableView 添加到未正确加载 json 数据的视图上的主要内容,如果未能解决你的问题,请参考以下文章

如何立即设置CustomTableView(CoreData)

如何为 CustomTableView Cell 应用 layoutConstraints

CustomTableView 从不更新

获取 customtableview 文本字段的 indexPath

表单验证如何定位到未填的选项

如何在 CustomTableView 中显示 ipad 库视频