TableView没有加载数据?

时间:2011-11-12 06:46:07

标签: iphone uitableview

在我的地图应用程序中,我在主屏幕上有分段控制器并使用它我有Map View& tableview(都是UIView)。我已尝试过所有内容,但我的数据未加载到我的tableview中。这是我的tableview代码。这里的标记是我的xml文件中的属性,它包含Showroom名称,Iam能够解析它。 .h文件

@interface HViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>    {      
 UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *_tableView;
@end

.m文件

已编辑 =使用ViewWillAppear,viewDieLoad,分段操作方法

 @synthesize tableView;
 - (void)viewDidLoad {
appDelegate = (HAppDelegate *)[[UIApplication   sharedApplication] delegate];

[segmentedControl addTarget:self action:@selector(segmentAction:)

           forControlEvents:UIControlEventValueChanged];

   }

 - (void)viewWillAppear:(BOOL)animated 
 {
self._tableView.rowHeight = 80.0;

    [_tableView reloadData];
 }

 -(void)segmentAction:(id)sender;{
UISegmentedControl* segCtl = sender ;

if( [segCtl selectedSegmentIndex] == 0 )

{
    NSLog(@"segmentAction mapView");
    mapView.hidden = NO;
    _tableView.hidden = YES;
    //[ self.view addSubview:mapView] ;    // adding view to segmentindex 0

}

if( [segCtl selectedSegmentIndex] == 1 )

{
    NSLog(@"segmentAction _tableview");
    _tableView.hidden = NO;
    mapView.hidden = YES;
    //[ self.view addSubview:_tableview] ;

}
}
  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
   return 1;
   }
  // Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section   {
NSLog(@"appDelegate.markers _tableview");

return [appDelegate.markers count];
   }

   //method to print row(showroom count on Header)
   - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:  (NSInteger)section {

 if(section == 0)
    return [NSString stringWithFormat:NSLocalizedString(@"ShowRooms[%d]",  @"Showroom format"), [appDelegate.markers count]];
   }

 // Customize the appearance of table view cells.
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {

static NSUInteger const kShowroomNameLabelTag = 2;
UILabel *ShowroomNameLabel = nil;

  static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle   reuseIdentifier:CellIdentifier] autorelease];

    cell.selectionStyle = UITableViewCellSelectionStyleGray;   

    ShowroomNameLabel = [[[UILabel alloc] initWithFrame:CGRectMake(50, 1, 300,   20)] autorelease];
    ShowroomNameLabel.tag = kShowroomNameLabelTag;
    ShowroomNameLabel.font = [UIFont boldSystemFontOfSize:18];
    [cell.contentView addSubview:ShowroomNameLabel];
NSLog(@"UITableViewCell.markers _tableview");

}
else 
    {
    ShowroomNameLabel = (UILabel *)[cell.contentView viewWithTag:kShowroomNameLabelTag];


}   

marker *aMarker = [appDelegate.markers objectAtIndex:indexPath.row];
//ShowroomNameLabel.text = aMarker.name;
ShowroomNameLabel.text= [NSString stringWithFormat:@"ShowroomName= %@",   aMarker.name];


return cell;
}

在我的tableview标题中,它正确显示数据计数但未显示数据。 我已将委托,数据源,_tableview连接到HViewController的fileOwner,我在其中放置了上面的代码。 Plz提出我错的地方。我正在解析XML文件并在控制台中获取数据,我可以在Map上显示它。但是我无法在tableview中加载数据。 enter image description here

1 个答案:

答案 0 :(得分:0)

尝试将[_tableView reloadData]移至viewWillAppear

UITableViewController重新加载viewWillAppear中的表格视图数据,而不是viewDidLoad。我不能告诉你这会产生什么影响的确切原因,尽管我可以想到几个。无论如何,值得一试。

编辑:
对评论的回应

  1. 如果正在调用titleForHeaderInSection:,则会有一个连接到表视图的数据源。因此,问题不在于缺少数据源连接。

  2. 我猜您的.xib文件中有2个表视图:一个大的&amp;它下面有一个短的。大表视图未连接到数据源,因此它只显示空行。短表视图 连接到数据源。但是,它对于标题来说足够高,并且没有剩余空间来显示任何单元格。因此,titleForHeaderInSection:被调用,但cellForRowAtIndexPath:不是因为没有空间来显示任何单元格 请注意,这只是一个猜测,但它是我能想到的唯一会导致您描述的行为的情况。你发布的代码看起来还不错,虽然比必要的要复杂一些。

  3. 毫无疑问reloadData应该在viewWillAppear中。这就是Apple工程师在创建UITableViewController类时所说的。所以,把它放在其他地方,你必须相信你比他们更了解。