2

我已经UITableView进入UIViewController并且我已经通过插座连接,并且将数据源分配给自我。numberOfSectionsInTableView并且numberOfRowsInSection被调用我尝试使用NSLogcellForRowAtIndexPath没有被调用我的代码看起来像

- (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;
}

谁能告诉我我犯了错误提前谢谢

4

5 回答 5

6

看起来numberOfSectionsInTableViewnumberOfRowsInSection返回的是 0。如果是这种情况,那么 cellForRowAtIndexPath 将不会被调用..

从上面的评论..似乎“YourAppDelegate”变量是null或 yourArray 是。尝试null在这些委托上保留断点,以检查它们返回的值

于 2012-10-19T10:39:06.637 回答
4

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

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

输入此代码后viewDidLoad:..

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

最后尝试在numberOfRowsInSection方法中返回int大于 0 的值

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [yourArray count];//or any int value
}
于 2012-10-19T10:41:00.800 回答
2

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

仔细检查以下几点

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

如果您以编程方式创建它,那么您应该如下设置委托和数据源,并且不要忘记采用dataSourecand delegatefor UItableViewin.h

   YourViewController : UIViewController<UITableViewdelegate, UITableViewDatasource>

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

        tableViewObj.delegate= self;
        tableViewObj.dataSource=self

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

  - (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 .
   }

希望对你有帮助

于 2012-10-19T10:48:23.593 回答
1

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

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

它可能会起作用。

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

如果您不在多线程环境中,那么您需要确保tableviews delegate并且datasource不为空。

于 2012-10-19T11:01:20.533 回答
0

在“numberOfRowsInSection”方法中检查数组中的数值。在返回值之前打印您的数组。

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

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

看起来您的数组在该方法中变得空了。

希望它能解决你的问题。

于 2012-10-19T10:45:27.207 回答