TableView не загружает данные? - PullRequest
0 голосов
/ 12 ноября 2011

В моем приложении Map у меня есть сегментный контроллер на главном экране, и с его помощью у меня есть Map View и tableview (оба UIView). Я перепробовал все, но мои данные не загружаются в таблицу. Вот мой код таблицы. Здесь маркер - это атрибут в моем XML-файле, который содержит имя выставочного зала, и я могу его проанализировать. .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 к fileOwner HViewController, в котором я поставил код выше. Плз подскажите что-то, где я не прав. Я анализирую XML-файл и получаю данные в консоли. Я могу показать их на карте. Но я не могу загрузить данные в мое табличное представление. enter image description here

1 Ответ

0 голосов
/ 12 ноября 2011

Попробуйте переместить [_tableView reloadData] в viewWillAppear.

UITableViewController перезагружает данные табличного представления в viewWillAppear, а не viewDidLoad. Я не могу сказать вам точную причину, по которой это будет иметь значение, хотя я могу думать о нескольких. В любом случае, стоит попробовать.

EDIT:
ОТВЕТ НА КОММЕНТАРИИ

  1. Если вызывается titleForHeaderInSection:, то к представлению таблицы подключен источник данных. Таким образом, проблема не в отсутствии соединения с источником данных.

  2. Я предполагаю, что у вас есть 2 вида таблицы в вашем файле .xib: большой и короткий под ним. Большое табличное представление не связано с источником данных, поэтому оно просто отображает пустые строки. Краткое представление таблицы подключено к источнику данных. Но он достаточно высок для заголовка и не имеет места для отображения каких-либо ячеек. Таким образом, titleForHeaderInSection: вызывается, но cellForRowAtIndexPath: не потому, что нет места для отображения каких-либо ячеек.
    Обратите внимание, что это всего лишь предположение, но я думаю, что это единственный сценарий, который может вызвать поведение, которое вы описали. Код, который вы разместили, выглядит нормально, хотя и немного сложнее, чем необходимо.

  3. Нет сомнений, что reloadData должно быть в viewWillAppear. Это то, о чем говорили инженеры Apple, создавая класс UITableViewController. Итак, чтобы поместить это в другое место, вы должны верить, что знаете лучше, чем они.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...