在reloadData之后,UITableViewCell变为nil

时间:2015-12-21 12:26:33

标签: ios objective-c uitableview cocoa-touch

我是一个名为tableView的UITableView。它是名为namesArray的数据数组。

我有一个为数组添加名称的函数,如下所示:

-(void)addName:(NSString*)name
{
    [self.namesArray addObject: name];
    [self.tableView reloadData];
}

我在reloadData上致电tableView后,最后一个单元格(已添加的单元格)未在tableView上显示,numberOfRowsInSection会返回实际数字,因此另一个单元格的空间,但没有实际的单元格。

我正在调试cellForRowAtIndexPath,我发现当cellForRowAtIndexPath调用新单元格时,dequeueReusableCellWithIdentifier会在调用其他单元格时返回nil(indexPath.row除外)当然== 0)它返回一个单元格。

cellForRowAtIndexPath的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier=@"Cell";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    cell.textLabel.text=[self.namesArray objectAtIndex:indexPath.row];

    return cell;
}

numberOfRows:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.namesArray.count;
}

注意:如果我尝试使用namesArray打印NSLog的最后一个对象,它看起来很好(最后一个对象是已创建的新对象),因此重新加载{的数据时出现问题{1}}

你能帮帮我吗?谢谢!

2 个答案:

答案 0 :(得分:0)

检查numberOfRowsInSection

中返回的行数
- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section

应该是这样的:

[self.namesArray count];

答案 1 :(得分:0)

·H

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
{

IBOutlet UITextField *txtName;
IBOutlet UITableView *tableObject;
NSMutableArray *namesArray;
}
- (IBAction)btnAdd:(UIButton *)sender;

的.m

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    namesArray = [[NSMutableArray alloc] init];
}




- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
    return namesArray.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    static NSString *cellIdentifier=@"Cell";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    cell.textLabel.text=[namesArray objectAtIndex:indexPath.row];

    return cell;
}

-(void)addName:(NSString*)name
{
    [namesArray addObject: name];
    [tableObject reloadData];
}
- (IBAction)btnAdd:(UIButton *)sender {
    [self addName:txtName.text];
}