是什么触发了cellForRowAtIndexPath?

时间:2012-07-14 08:46:19

标签: iphone xcode uitableview

我有一个TableView,我正在尝试将数据加载到。从NSLog显示数据是正确的并且存在。但是,没有调用以下方法,例如, NSLog评论根本没有出现。:

- (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];    
    // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
}
NSString *cellValue = [listOfStates objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
return cell; 
NSLog(@"Passed: cellForRowAtIndexPath");

}

同样,init也没有运行。我虽然init总是运行,如果存在?

- (id)init { 
    if ((self = [super init])) {
    listOfStates = [[NSMutableArray alloc] init];
    stateName = [[NSString alloc] init];
    NSLog(@"INIT StateName %@", stateName);
    }
return self;
 NSLog(@"Passed: init");
}

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果在返回后放置NSLog,它将退出该方法并且不会调用NSLog,无论何时调用return它都会退出该方法。

答案 1 :(得分:1)

当需要单元格时,

tableView:cellForRowAtIndexPath:在其数据源上由表视图调用,这可以是首次显示单元格时,也可以是用户滚动并且单元格将出现时

你的init方法没有被调用,因为UITableView使用initWithFrame:style:和UITableViewController(它不清楚你试图覆盖哪个init)使用initWithStyle:,而不是“普通”init方法。如果要进行自定义设置,则应覆盖这些方法

正如其他答案所提到的,你在return语句之后放的任何内容都不会被执行

答案 2 :(得分:0)

回答你的问题:tableView:cellForRowAtIndexPath:从表视图中被称为数据源方法。要调用它,必须将tableviews数据源属性设置为实现tableView:cellForRowAtIndexPath:的类。另一方面,sujith是对的:NSLog后不会调用return