Ios UITableViewCells在滚动时清空(objc)

Ios UITableViewCells在滚动时清空(objc),ios,objective-c,ios8,Ios,Objective C,Ios8,UITableViewCells在滚动时清空(Objective-C) 当我开始在表视图中滚动时,UITableViewCells出现清空问题 我已经看过了,但是问题仍然存在 1) 我有一个popover视图控制器,它提供了一种登录到某些管理系统的方法。成功登录后(尚未实现登录按钮),登录按钮直接将用户带到一个测试表视图,稍后将从一些外部数据库提供该视图) 2) 成功登录后,popover中的登录视图将被删除,自定义UITableViewController将使用其自己的XIB发挥作用 3) 此

UITableViewCells在滚动时清空(Objective-C)

当我开始在表视图中滚动时,UITableViewCells出现清空问题

我已经看过了,但是问题仍然存在

1) 我有一个popover视图控制器,它提供了一种登录到某些管理系统的方法。成功登录后(尚未实现登录按钮),登录按钮直接将用户带到一个测试表视图,稍后将从一些外部数据库提供该视图)

2) 成功登录后,popover中的登录视图将被删除,自定义UITableViewController将使用其自己的XIB发挥作用

3) 此UITableViewController使用自定义UITableViewCell,因为在此配置中不可能使用原型单元格

这一切工作到了我滚动表格的地步——由于某种原因,所有的单元格都被清空了

下面是代码运行情况(我省略了明显的设置,例如属性和表部分等):

1) customPopUpViewController(XIB、.h、.m):

2) LibraryAdminTableViewController(XIB、.h、.m):

3) LibraryAdminTableViewCell(XIB、.h、.m)-我在属性检查器“LibraryAdminCell”中给出了标识符:

@property (strong, nonatomic) IBOutlet UILabel *cellLabel;

我遗漏了什么?

发生这种情况是因为您没有创建新的单元格,当tableview尝试将单元格出列,但它没有获取单元格时,它应该创建要使用的单元格,但您没有创建任何单元格,因此它返回nil。请尝试下面的代码



问题解决了。根据这一点,我必须通过弹出式控制器中的属性获取对自定义UITableViewController的强引用,因为ViewController(作为tableView的数据源)不会保留在内存中。

能否请您检查是否每次调用cellForRowAtIndexPath时,实际上返回的是一个单元格而不是零?是的,我首先遇到了这个问题,但问题是:LibraryAdminTableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:@“LibraryAdminCell”];如果(cell==nil){cell=[[LibraryAdminTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle重用标识符:@“LibraryAdminCell”];cell.selectionStyle=UITableViewCellSelectionStyleNone;}像这样类型转换。LibraryAdminTableViewCell*单元格=(LibraryAdminTableViewCell*)[tableView出列可重用单元格,标识符:@“LibraryAdminCell”];这可能就是问题所在。因为第一次上面的代码将初始化单元,但是第二次它需要重用。试试这个,你在说什么内容数据?您在上面设置的只是标签文本。在委托方法中,您通常不应该引用
self.LibraryAdminTable
,而应该使用
tableView
。dequeueReusableCellWithIdentifier:返回值--具有关联重用标识符的UITableViewCell对象。此方法始终返回有效的单元格。不幸的是,我仍然遇到使用上述代码清空单元格的问题。您正在创建多少行?在代码[self.LibraryAdminTable注册表项nb:[UINib nibWithNibName:@“LibraryAdminTableViewCell”捆绑包:[NSBundle mainBundle]]forCellReuseIdentifier:@“LibraryAdminCell”];试试我的代码,在你的单元格标签上设置一些背景色,在滚动表格后检查标签是否存在。
- (void)viewDidLoad {
    [super viewDidLoad];
    self.LibraryAdminTable.delegate = self;
    self.LibraryAdminTable.dataSource = self;
    self.tblContentList = [[NSMutableArray alloc]init];
    self.tblContentList = [NSMutableArray arrayWithObjects:@"Sync Pack 1",@"Sync Pack 2",@"Sync Pack 3", nil];
    [self.LibraryAdminTable registerNib:[UINib nibWithNibName:@"LibraryAdminTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"LibraryAdminCell"];   
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    LibraryAdminTableViewCell *cell = [self.LibraryAdminTable dequeueReusableCellWithIdentifier:@"LibraryAdminCell" forIndexPath:indexPath];
    NSString* trackList = [self.tblContentList objectAtIndex:indexPath.row];
    cell.cellLabel.text = trackList;
    return cell;
}
@property (strong, nonatomic) IBOutlet UILabel *cellLabel;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    LibraryAdminTableViewCell *cell = (LibraryAdminTableViewCell*)[self.LibraryAdminTable dequeueReusableCellWithIdentifier:@"LibraryAdminCell"
                                                                                                               forIndexPath:indexPath];
    if (cell == nil)
    {
        cell = [[LibraryAdminTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                reuseIdentifier:@"LibraryAdminCell"];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    NSString* trackList = [self.tblContentList objectAtIndex:indexPath.row];
    cell.cellLabel.text = trackList;
    return cell;
}