NSMutableArray 将最后一个对象移动到第一个位置

NSMutableArray move last object to first position

我有一个 UITableview,它有 8 行对应于我的 NSMutableArray 和 8 个元素。

我想将数组中的索引 7 移动到索引 0,将之前的索引 0 下推到索引 1。之前的索引 6 现在位于索引 7 的位置。

当我使用 - insertObject:atIndex: 时,我的 tableView 崩溃说数字或数组项现在是 9 而不是 8。

我已尝试创建一个临时数组来保存可变数组的元素,但我希望单元格向下移动时平稳过渡,而不是仅仅重新加载。有什么办法吗?

您正在数组中插入对象,因此它会增加您的数组计数

id object = [self.array objectAtIndex:index];
[self.array removeObjectAtIndex:index];
[self.array insertObject:object atIndex:newIndex];
id object =[self.array lastObject];
[self.array removeLastObject];
[self.array insertObject:object atIndex:0];

您必须编辑 dataSource 并更新 TableView 以保持一致:

NSIndexPath *indexPath = [NSIndexPath indexPathForItem:[dataSource count]-1 inSection:0];
[tabelView beginUpdates];
[dataSource insertObject:[dataSource lastObject] atIndex:0];
[dataSource removeLastObject];
[t moveRowAtIndexPath:indexPath toIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
[tabelView endUpdates];

将您的代码包装在 beginUpdates-endUpdates 块中。例如

  [tableView beginUpdates];
  id object = [mutableArray lastObject];
  [mutableArray removeLastObject];
  [mutableArray insertObject:object atIndex:0];
  [tableView moveRowAtIndexPath:[NSIndexPath indexPathWithIndex:mutableArray.count]
                    toIndexPath:[NSIndexPath indexPathWithIndex:0]];
  [tableView endUpdates];