故事板中的UITableView显示为空

时间:2013-02-05 18:20:25

标签: iphone objective-c ios5

这是我第一次使用Storyboard构建应用程序。我正在尝试使用自定义单元格创建UITableView。我在IB中创建了单元格并为其创建了一个自定义的tableViewCell类(添加了一些标签,创建了适当的出口,在IB中连接它们并将自定义类分配给IB中的自定义单元格)。

在负责TableView的ViewController中,我创建数据源(带有一些数组的dict)并填写所有必需的方法(我已经尝试了UITableViewControler和UIViewController,它被设置为委托和数据源对于tableview)

当我运行应用程序时 - tableview是空的。在做了一些NSLogging后,我注意到数据源方法永远不会被执行。我没有想法为什么。

我现在已经疯了几个小时了。请帮帮我:))

如果您需要查看代码或故事板或其他任何内容,请告诉我。

UPDATE:好的,经过一番挖掘,我决定测试相同的代码,但使用NSMutableArray作为数据源而不是NSMutableDictionary。它的工作原理! 现在,有人可以向我解释为什么它不适用于字典吗?

这是做了什么。我有一个带有5个数组的字典,每个数组有5个字符串。

在numberOfRowsForSection方法中,我返回了[dict count]

在cellForRowAtIndexPath方法中,我使用了这段代码

NSArray * routeArray = [dealsDict objectForKey:@"route"];
cell.routeName.text = [routeArray objectAtIndex:indexPath.row];

NSArray * companyArray = [dealsDict objectForKey:@"company"];
cell.companyName.text = [companyArray objectAtIndex:indexPath.row];

NSArray * priceArray = [dealsDict objectForKey:@"price"];
cell.priceLabel.text = [priceArray objectAtIndex:indexPath.row];

NSArray * dateArray = [dealsDict objectForKey:@"date"];
cell.dateLabel.text = [dateArray objectAtIndex:indexPath.row];

NSArray * monthArray = [dealsDict objectForKey:@"month"];
cell.monthLabel.text = [monthArray objectAtIndex:indexPath.row];
NSLog(@"I'm in here");

return cell;

为什么不显示任何内容?

2 个答案:

答案 0 :(得分:0)

在IB中,选择您的表格视图,并确保为您的控制器设置了delegatedataSource个出口

答案 1 :(得分:0)

UITableView需要一些集合数据集作为数据源。它的委托方法“cellForRowAtIndexPath”被调用等于集合的元素数(ARRAY)。像numberOfRowsInSection委托告诉表视图,它需要为集合中的每个元素调用cellForRowAtIndexPath。并且它还需要一些迭代器来每次读取下一个元素,在字典的情况下,它总是在每次调用cellForRowAtIndexPath时都粘贴到相同的数据元素。我希望它会让你知道它的工作原理,如果你还需要了解其他信息,请告诉我。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return [self.data count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath
{
  MessagesCell *cell = [tableView dequeueReusableCellWithIdentifier:@"messageCellIdentifier"];

  Message *msg = [self.data objectAtIndex:indexPath.row];
  cell.Name.text = msg.Name;
  cell.Message.text = msg.MessageText;
  cell.Time.text = msg.Time;

  return cell;
}