我的tableviewcontroller
行为不当。假设我添加了两个对象:dog
和cat
。
- 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
似乎是不正确的更新?
答案 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
方法
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>