未调用UITableView cellforrowatindexpath

未调用UITableView cellforrowatindexpath,uitableview,Uitableview,我对Iphone开发还很陌生。所以,如果我问一些非常简单的问题,请容忍我 在我的应用程序中,我有多个视图(即xib文件)。单击主视图(CouponWebsiteViewController.Xib)上的按钮后,应用程序应加载第二个视图(BrowseList.Xib),该视图包含一个UITable,我必须用一些数据填充该UITable。我编写了以下代码来填充BrowseList.m文件中的数据: - (void) viewDidLoad{ arrayData = [[NSArray all

我对Iphone开发还很陌生。所以,如果我问一些非常简单的问题,请容忍我

在我的应用程序中,我有多个视图(即xib文件)。单击主视图(CouponWebsiteViewController.Xib)上的按钮后,应用程序应加载第二个视图(BrowseList.Xib),该视图包含一个UITable,我必须用一些数据填充该UITable。我编写了以下代码来填充BrowseList.m文件中的数据:

- (void) viewDidLoad{
    arrayData = [[NSArray alloc] init];
    arrayData = [arrayData arrayByAddingObject:@"dfsgdf"];
    arrayData = [arrayData arrayByAddingObject:@"aaaaaa"];
    self.lblNewScreen.text = [arrayData objectAtIndex:0];
    [super viewDidLoad];
}

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

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [arrayData count];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault 
                 reuseIdentifier:CellIdentifier] 
                autorelease];
    }

    NSString *cellValue = [arrayData objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;
    [tableView setEditing:YES animated:YES];
    return cell;
}
但它并没有填充表中的数据,当我调试这段代码时,我发现它并没有执行cellForRowAtIndexPath方法,而是在调试numberOfRowsInSection和numberOfSectionsInTableView方法

但有趣的是,当我在CouponWebsiteViewController.m(即主视图)上编写相同的代码时,它正在填充表中的数据

关键是这段代码在主视图上运行良好,但在其他视图上不起作用

任何人都可以告诉我我缺少了什么,或者在主视图以外的视图上填充UITable的任何其他方法

提前谢谢。
高拉夫

我并不乐观,但这里有一些想法

  • 我认为当你把数组代码放到
    viewDidLoad
    中时已经太迟了<代码>ViewDidLoad在数据已放入表中后执行。尝试将此代码放在initWithStyle方法或您拥有的任何
    init
    方法中。或者你甚至可以把它放在
    视图将出现的
    方法中,但是要确保遵循下面的建议
  • 您可以尝试的另一件事是,只需在
    viewDidLoad
    方法的末尾调用
    [self.tableView reloadData]
    。虽然这不像第一个建议那么理想

初始化视图中的UITableView将出现…

是否确实将类设置为表上的数据源?为此,control+单击Interface Builder中的表视图,并将其拖到占位符下的文件所有者上。然后选择数据源(也可能是委托,具体取决于控制器视图设置)。

是否确保将表视图设置为委托

如果您有UITableViewController,则需要在viewDidLoad中执行以下操作:

[self.tableView setDelegate:self];
[self.myTableProperty setDelegate:self];
如果您有其他类型的视图控制器,只需将UITableView设置为IBOutlet,连接到tableViewDelegate和tableViewDataSource的文件所有者,然后在viewDidLoad中执行此操作:

[self.tableView setDelegate:self];
[self.myTableProperty setDelegate:self];
如果视图控制器不是UITableViewController,请确保遵守.h文件中的UITableViewDelegate和UITableViewDataSource协议


如果可变数组或用于填充单元格内容的数组被设置为头文件中的属性,请欢呼。 然后确保你总是使用

self.yourArray = [[NSMutableArray alloc] init];
[self.yourArray addObject:@"Object1"];
然后要获取numberOfRowsInSection中的计数,您需要通过以下方式访问它:

return [self.yourArray count];
这与用来引用实例变量的This指针非常相似。 当然,如果您已经将UITableView的数据源和委托设置为文件所有者,那么您还需要记住。另外,您已经将UITableViewDelegate和UITableViewDataSource包含在viewController的头文件中

我希望它能帮助你。祝你好运。快乐编码!
干杯

我在那里遇到过类似的问题。表视图委托和数据源设置正确,并且
(NSInteger)表视图:(UITableView*)表视图行数section:(NSInteger)节
也返回正计数。但是从未调用
-(UITableViewCell*)tableView:(UITableView*)tableView cellforrowatinexpath:(nsindepath*)indepath


我以前试过这些方法,但都不管用。最后,我注意到我忘记将表视图添加为视图控制器的子视图。这样做之后,它就像一个符咒

我建议您确保表的大小需要显示行

事实上,这可能就是为什么不调用方法
cellforrowatinexpath
,但是应该调用
numberOfRowsInSection


在这种情况下,您将看不到表中的任何内容。

旧问题,但我会插话。对其他人来说

tableview不更新以及CellForRowatineXpath:未被调用的原因有很多

如果直接使用UITableViewController,“numberOfRowsInSection:”方法可能返回0

如果在视图控制器中使用UItableView。很可能是您没有采用正确的协议和实现正确的方法——另外,如果您使用的是xib或故事板,而您没有分配正确的委托和数据源,则是另一个潜在的问题


最后,如果您使用的是UITableViewController的子类,那么您可能没有覆盖其中一个默认方法,numberOfRowsInSection再次返回0。

对于遇到此问题的任何人,我通过使用以下方法将我的TableView的控制器作为子控制器添加到父控制器来解决此问题:

UITableViewController * table = [[UITableViewController alloc] init];
...
[self.view addSubview:table.tableView];
[self addChildViewController:table];

我在UITableView上也遇到了这个问题,我也设置了数据源并将其委托给表视图,但是没有调用我的
cellforrowatinexpath
方法

解决方案:

  • 我的网络阻止了我的方法(使用防火墙)。我询问了我的网络管理员,并获得了对网络的完全访问权,然后调用了我的
    cellForRowIndexPath
    方法

  • 当我的响应来自web服务时,由于网络块响应为黑色,所以未调用
    cellForRowIndexPath
    方法


    • 好吧,我可以为每个有这个问题的人补充一点。我建议使用debug并确保:

      -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
      
      不返回0。如果未实现此函数或返回0,则该方法:

      cellForRowAtIndexPath:(NSIndexPath *)indexPath 
      
      根本不调用,因为没有要显示的单元格