TableViewController没有正确删除单元格?

时间:2013-06-24 04:19:00

标签: ios objective-c tableview

我的tableviewcontroller行为不当。假设我添加了两个对象:dogcat

 - dog
 - cat

然后我删除猫。

 - dog

然后我添加第三个(此时为第二个)对象bird。单元格将填充cat而不是鸟。鸟最终没有被存储在任何地方,我的列表导致:

 - dog 
 - cat

有谁知道这种行为的原因是什么?我不是在我的代码中查找特定错误,因为代码太多而无法显示。我希望你们可能知道我应该去解决这个问题。如果你们想要看到我的一些代码,请告诉我。谢谢。

编辑:所以我让控制台在删除某些内容时打印出数组中的所有对象。正确地将对象添加/删除到数组中,因此我的单元格似乎没有正确填充数据。

以下是cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if(!cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
        Employee* tempEmployee = [[[EmployeeStore store] employees] objectAtIndex:indexPath.row];
        NSString* label = [NSString stringWithFormat:@"N. %@   P. %@", tempEmployee.name, tempEmployee.pin];
        [[cell textLabel] setText: label];
    }
    return cell;
}

以下是我用来删除的内容:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if(editingStyle == UITableViewCellEditingStyleDelete){
        NSMutableArray* employees = [[EmployeeStore store] employees];
        [[EmployeeStore store] removeEmployee:[employees objectAtIndex:indexPath.row]]; 
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

以下是我在上面的方法中调用的EmployeeStore类中的removeEmployee:

-(void) removeEmployee:(Employee*)e{
    [context deleteObject:e];
    [employees removeObject:e];
}

编辑2:我的应用程序正在利用核心数据来保存表条目。当我关闭应用程序并再次运行它时,错误会自行修复(意味着它正确地从上下文加载)。所以它来自

 - dog 
 - cat 

到目的地:

 - dog
 - bird

似乎是不正确的更新?

2 个答案:

答案 0 :(得分:0)

试试这样:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if(!cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    Employee* tempEmployee = [[[EmployeeStore store] employees] objectAtIndex:indexPath.row];
    NSString* label = [NSString stringWithFormat:@"N. %@   P. %@", tempEmployee.name, tempEmployee.pin];
    [[cell textLabel] setText: label];

    return cell;
}

答案 1 :(得分:0)

将以下代码移到cellForRowAtIndexPath方法

中的if条件之外
  Employee* tempEmployee = [[[EmployeeStore store] employees] objectAtIndex:indexPath.row];
  NSString* label = [NSString stringWithFormat:@"N. %@   P. %@", tempEmployee.name, tempEmployee.pin];
  [[cell textLabel] setText: label];

代码中的简单错误:只有在分配了新的cell时才设置cell文本,而不是在重用cell时设置。{/ p>