我在UITableView
中UIViewController
,我已通过outlet和delegete连接,数据源已分配给自己。numberOfSectionsInTableView
和numberOfRowsInSection
正在调用我试过使用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;
}
任何一个电话我都会犯错误提前致谢
答案 0 :(得分:6)
似乎返回的numberOfSectionsInTableView
和numberOfRowsInSection
为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)
似乎返回的numberOfSectionsInTableView
和numberOfRowsInSection
为0或者可能是此原因的另一个原因
仔细检查以下几点
1 如果您要从XIB创建TableView,则应设置数据源并委托给文件所有者。
如果您以编程方式创建它,那么您应该将delegate和dataSource设置如下,并且不要忘记在dataSourec
中采用delegate
和UItableView
.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
delegate
和datasource
不为空。
答案 4 :(得分:0)
使用“numberOfRowsInSection”方法检查数组中的数字值。打印你的阵列 在返回价值之前。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%@",returnedArray);
return [returnedArray count];//
}
您也可以尝试在方法中发送一些静态行数进行检查。
看起来你的数组在该方法中变为null。
希望它能解决你的问题。