-tableView:cellForRowAtIndexPath:没有被调用

时间:2012-10-19 10:34:34

标签: iphone uitableview ios5 xcode4

我在UITableViewUIViewController,我已通过outlet和delegete连接,数据源已分配给自己。numberOfSectionsInTableViewnumberOfRowsInSection正在调用我试过使用NSLog,但cellForRowAtIndexPath没有调用我的代码看起来像

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@" cellForRowAtIndexPath ");

    static NSString *CellIdentifier = @"CurrencyCell";

    CurrencyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[CurrencyCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
    }
    new *Obj = [appdelegate.array objectAtIndex:indexPath.row];


    cell.CurNameLabel.text = Obj.C_Name;
    cell.textLabel.text = @"sdfnhsdfndsio;";
    NSLog(@"C_Name %@", Obj.C_Name);

    return cell;
}

任何一个电话我都会犯错误提前致谢

5 个答案:

答案 0 :(得分:6)

似乎返回的numberOfSectionsInTableViewnumberOfRowsInSection为0.如果是这种情况,那么将不会调用cellForRowAtIndexPath ..

从上面的评论中看来,“YourAppDelegate”变量是null或yourArray是null。尝试在这些代理上保留断点,检查它们返回的值

答案 1 :(得分:4)

试试这个 在.h文件中添加委托和数据源,如下所示..

@interface AddProjectViewController : UIViewController<
UITableViewDataSource,UITableViewDelegate>
.....
@end

viewDidLoad:之后输入此代码..

    - (void)viewDidLoad
   {
        yourTableView.delegate= self;
        yourTableView.dataSource=self;
   }

最后在numberOfRowsInSection方法中尝试此操作,以返回大于0的int

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [yourArray count];//or any int value
}

答案 2 :(得分:2)

似乎返回的numberOfSectionsInTableViewnumberOfRowsInSection为0或者可能是此原因的另一个原因

仔细检查以下几点

1 如果您要从XIB创建TableView,则应设置数据源并委托给文件所有者。

如果您以编程方式创建它,那么您应该将delegate和dataSource设置如下,并且不要忘记在dataSourec中采用delegateUItableView .h

   YourViewController : UIViewController<UITableViewdelegate, UITableViewDatasource>

将Code下面的行放在创建UITableView的行之后

        tableViewObj.delegate= self;
        tableViewObj.dataSource=self

2 仔细检查您的datasource(无论数组的名称)是否有数据,因为每当您创建传递数组的行数时,计数如下所示

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
     {  
      int  numberOfRows= [datasource count];
      return numberOfRows;
      //  here check does the `numberOfRows` have nonzero value or just 0
      if it retunes 0 then cellForAtIndexPath would not call .
   }

我希望它对你有帮助

答案 3 :(得分:1)

如果您在应用中启用了多线程概念,即使您在reloadData tableview上调用cellForRowAtIndexPath方法,有时也不会被调用。所以调用这样的realod方法:

[self performSelectorOnMainThread:@selector(reloadTable) withObject:self waitUntilDone:NO];

它可能有用。

- (void)reloadTable
{
    [self.tableView reloadData];
}

如果您不在多线程环境中,则需要确保tableviews delegatedatasource不为空。

答案 4 :(得分:0)

使用“numberOfRowsInSection”方法检查数组中的数字值。打印你的阵列 在返回价值之前。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"%@",returnedArray);
    return [returnedArray count];//
}

您也可以尝试在方法中发送一些静态行数进行检查。

看起来你的数组在该方法中变为null。

希望它能解决你的问题。