为啥我的 UITableView 不显示数据?

Posted

技术标签:

【中文标题】为啥我的 UITableView 不显示数据?【英文标题】:Why won't my UITableView show the data?为什么我的 UITableView 不显示数据? 【发布时间】:2010-07-08 18:28:57 【问题描述】:

这是我的问题。我在标签栏应用程序中有一个屏幕,显示搜索栏和 UITableView。当您第一次打开选项卡时, UITableView 是空的。输入搜索后,iPhone 会根据查询获取并解析 XML。

所有这些都运行良好。我将 XML 数据添加到应该填充表的基础数组中。我已经验证该数组包含数据,并且不为空。搜索后 UITableView 保持空白。有什么帮助吗?

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
//test line
NSLog(@"%@",searchBar.text);
NSString *criteria = [[NSString alloc] initWithString:searchBar.text];

//Parse xml
NSString *uidString = @"55555";

NSString *varString = [[NSString alloc] initWithFormat:@"qryid=4&uid=%@&Criteria=%@",uidString,criteria];
NSString *urlString = [[NSString alloc] initWithString:@"http://services.auctiontrac.com/websvc.asp"];
NSString *parsingString = [[NSString alloc] initWithFormat:@"%@?%@",urlString,varString];
xmlSearch = [[XMLSearch alloc] loadXMLByURL:parsingString];

//init array for table
tableArray = [[NSMutableArray alloc] init];

carTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
[carTable reloadData];

//Add search results to UITableView 
for (Car *c in [xmlSearch cars]) 
    [tableArray addObject:c.make];
    NSLog(@"Added item with make: %@",c.make);

[searchBar resignFirstResponder];   

如果您需要更多代码来回答这个问题,请告诉我。

【问题讨论】:

为什么你认为向 tableArray 添加对象应该更新实际的表视图? tableArray 是你自己做的数组,不是吗? 我认为我们需要更多的代码......虽然假设一些关于其余代码的事情'reloadData'应该很可能是之后你已经填充了“tableArray "。 在 UITableView 方法中,将 tableArray 中的对象添加到表中。 【参考方案1】:

请确保您已为您的UITableView 设置了dataSource,并且在您更新了保存数据的数组之后在您的表格视图上调用了-reloadData

调用-reloadData 将提示表视图向其数据源询问节数、每个节中的行数,以及UITableViewCells 询问当前可见的数据。我假设您的数据源方法从tableArray 获取每行的行数和数据。这意味着当您调用 [carTable reloadData] 时,tableArray 必须包含最新数据。

【讨论】:

【参考方案2】:

你设置了表格的数据源吗?尝试这样做。

【讨论】:

在界面生成器中?你可以说得更详细点吗?我是 iPhone 编程的菜鸟。 因为您是从代码 IB 中创建的,所以如果您想了解更多信息,请检查 UITableView 参考和/或下载苹果提供的示例。【参考方案3】:

您正在创建的表格永远不会添加到视图中,因此它永远不会出现。此外,您应该已经初始化表并将其添加到此方法之外的视图中,然后在搜索后简单地对其调用 reloadData。

【讨论】:

【参考方案4】:

您必须在视图中添加 carTable 即[self.view addSubview: carTable];

并设置 carTable 的数据源和委托 即

carTable.datasource = self;
carTable.delegate = self;

如果你通过 Interface builder 给了 put tableview 那么就不需要

carTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];

只需设置表的数据源和委托并制作表的出口

IBoutlet UiTableView *carTable;

并在 Interface builder 中将其与您的表连接

【讨论】:

以上是关于为啥我的 UITableView 不显示数据?的主要内容,如果未能解决你的问题,请参考以下文章

为啥UITableView回到前面时只显示一半的数据

为啥我的函数没有重新加载 UITableView 的数据?

为啥我的单元格在我的 UITableView 中显示为空白?

为啥 UITableView 不从数组中填充

为啥我的 UITableView 单元格的渐变子层没有正确显示?

我的 UITableView 不会向下滚动到数据的末尾!为啥?