我是 iOS 开发的新手。我不明白 tableView 的行为。
为了测试它,我制作了两个简单的 tableView 应用程序,如果用户向下滚动到 tableView 的末尾,我在两种情况下都使用标准代码片段加载了 99999 行的 tableView。
应用 1:TableViewWithStoryBoard cellForRowAtIndexPath:代码片段
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // for StoryBoard
if (cell == nil)
{
static int i;
NSLog(@"New Cells created: %d ",++i);
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.textLabel.text = [self.tableData objectAtIndex:indexPath.row];
return cell;
}
问题1: 如果我删除
forIndexPath:indexPath from
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // for StoryBoard
那么 StoryBoard 在模拟器中仍然可以正常工作吗?那为什么提供呢?
问题2: 为什么NSLog(@"New Cells created: %d",++i); 即使我向下滚动到 tableView 末尾的 99999 行,也永远不会打印?在什么情况下 NSLog 会打印一些值?
应用 2:TableViewWithNib cellForRowAtIndexPath:代码片段
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// for Nib File
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.textLabel.text = [self.tableData objectAtIndex:indexPath.row];
return cell;
}
问题3: 如果我添加
forIndexPath:indexPath
在 XIB 版本中,然后我的应用程序崩溃并引发异常?为什么会这样?
异常或错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法使具有标识符 Cell 的单元格出列 - 必须为标识符注册 nib 或类或连接情节提要中的原型单元格”