我有一个单例类,用于在各种视图中显示数据。
有一个TableView用于删除/插入行。我有一个在编辑/完成之间切换的按钮 允许编辑。 'streams是Singleton类中的一个变量'
- (void)setEditing:(BOOL)flag animated:(BOOL)animated{
int count = [streams count];
UITableView *tableView = (UITableView *)self.view;
NSArray *topIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:count inSection:0]];
if (self.editing == YES)
{NSLog(@"EDITING");
[tableView insertRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];}
else{NSLog(@"NOT EDITING");
[tableView deleteRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];}
}
并使用editingStyleForRowAtIndexPath允许选择每行使用哪种编辑样式。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
int count = [streams count];
int row = indexPath.row ;
if (row == count)
return UITableViewCellEditingStyleInsert;
else
return UITableViewCellEditingStyleDelete;}
我使用cellForRowAtIndexPath在编辑模式下创建一个带有“添加电话号码”文本的附加行。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *DeleteMeCellIdentifier = @"AudioCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
DeleteMeCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:DeleteMeCellIdentifier] autorelease];
}
int x = indexPath.row;
if (self.editing == YES)
{
if (indexPath.row == [streams count])
cell.textLabel.text = @"Add Phone Number";
else
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
return cell;}
删除行工作正常。在选择插入行时,另一个视图被压入堆栈。从该视图中,为用户提供了许多文本选项来标记我们刚刚创建的新行。选择完成后,以下代码用于更新单例类。
- (void)viewWillDisappear:(BOOL)animated {
Disc *disc = [Disc sharedDisc];
[disc.streams insertObject:@"0208" atIndex:0];
[super viewDidAppear:animated];}
一旦选择了行的文本,用户必须选择后退按钮才能返回上一个TableView。这是问题出现的时候。在主TableView中,而不是标记为“添加电话号码”的一个选项 那里有两个。
我知道TableView正在使用的singelton类已经更新,它的TableView没有以正确的方式更新。如果我然后在编辑/完成之间切换,则tableView会正确显示信息。
我试图更新ViewDidLoad&中的单例类。 ViewWillAppear方法但结果是一样的,第一次重新加载视图时它没有正确显示新行。
我考虑过覆盖“Back”BarButton以尝试让TableView正确显示。
答案 0 :(得分:0)
我不明白为什么重复的行与更新tableview有关。但听起来有点像你正在以某种方式创建两张桌子?或者甚至两个视图控制器相互叠加,但我会假设你的导航代码设置正确(使用tabbars会导致这个视图控制器初始化代码不正确)。
您肯定想要在ViewWillAppear中更改表内容的任何内容。
即使在ViewDidLoad中更新(通常仅在第一次出现视图时调用),您是否获得了重复的单元格。要在导航回来时执行,
如果您要刷新表格数据,请在ViewWillAppear中使用[tableview reloadData]。
如果所有其他方法都失败了,为了追踪这个错误,我建议在tableView对象上添加Expression并观察它的变化(在Debug模式下)。