我遇到的问题是我只能想象一个非常简单的问题。我正在从一个UITableViewController
加载一个名为LocationViewController
的{{1}}课程:
UIViewController
在本课程中,我实现了以下3种方法:
LocationViewController *lvc = [[LocationViewController alloc] init];
[self.navigationController pushViewController:lvc animated:true];
我收到以下错误:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CityCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = @"Test";
return cell;
}
我在使用StoryBoard在ViewControllers之间转换之前遇到此错误,这是因为CellIdentifier不正确。我不知道我做错了什么。我试过用这个ViewController加载一个nib文件,但是会抛出同样的错误。
答案 0 :(得分:3)
您必须分配单元格。使用此代码。
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
答案 1 :(得分:0)
使用此代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = @"Test";
return cell;}
答案 2 :(得分:0)
dequeueReusableCellWithIdentifier返回nil。在调用dequeueReusableCellWithIdentifier后检查cell是否为nil,在这种情况下创建一个新的UITableViewCell。
答案 3 :(得分:0)
dequeueReusableCellWithIdentifier是已创建的UITableViewCells的缓存,其标识符为“CityCell”
如果您使用下面的代码,它会尝试从缓存中获取一个单元格,如果不能,则会创建一个单元格,然后将其存储在单元格缓存中供以后使用。
您需要大型表的缓存,因为它在滚动时大大提高了表的性能。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"CityCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
cell.textLabel.text = @"Test";
return cell;
}
查看表格视图编程指南以了解更多相关信息: