@@ -505,23 +505,24 @@ final class DataChangeManager {
505505 lastUndoResult = UndoResult ( action: action, needsRowRemoval: false , needsRowRestore: false , restoreRow: nil )
506506
507507 case . rowInsertion( let rowIndex) :
508- let savedValues = insertedRowData [ rowIndex]
509- undoManager. registerUndo ( withTarget: self ) { [ savedValues] target in
510- // Restore saved values so the reverse operation can access them
511- if let savedValues {
512- target. insertedRowData [ rowIndex] = savedValues
513- }
514- target. applyDataUndo ( . rowInsertion( rowIndex: rowIndex) )
515- }
516- undoManager. setActionName ( String ( localized: " Insert Row " ) )
517-
518508 if insertedRowIndices. contains ( rowIndex) {
509+ // Undo: capture values BEFORE undoRowInsertion clears them
510+ let savedValues = insertedRowData [ rowIndex]
511+ undoManager. registerUndo ( withTarget: self ) { [ savedValues] target in
512+ if let savedValues {
513+ target. insertedRowData [ rowIndex] = savedValues
514+ }
515+ target. applyDataUndo ( . rowInsertion( rowIndex: rowIndex) )
516+ }
517+ undoManager. setActionName ( String ( localized: " Insert Row " ) )
519518 undoRowInsertion ( rowIndex: rowIndex)
520519 changedRowIndices. insert ( rowIndex)
521520 lastUndoResult = UndoResult (
522521 action: action, needsRowRemoval: true , needsRowRestore: false , restoreRow: nil
523522 )
524523 } else {
524+ // Redo: re-insert the row, then register reverse
525+ let savedValues = insertedRowData [ rowIndex]
525526 insertedRowIndices. insert ( rowIndex)
526527 let cellChanges = columns. enumerated ( ) . map { index, columnName in
527528 CellChange (
@@ -538,6 +539,15 @@ final class DataChangeManager {
538539 if let savedValues {
539540 insertedRowData [ rowIndex] = savedValues
540541 }
542+ // Register reverse AFTER insertedRowData is populated
543+ let valuesToCapture = insertedRowData [ rowIndex]
544+ undoManager. registerUndo ( withTarget: self ) { [ valuesToCapture] target in
545+ if let valuesToCapture {
546+ target. insertedRowData [ rowIndex] = valuesToCapture
547+ }
548+ target. applyDataUndo ( . rowInsertion( rowIndex: rowIndex) )
549+ }
550+ undoManager. setActionName ( String ( localized: " Insert Row " ) )
541551 changedRowIndices. insert ( rowIndex)
542552 lastUndoResult = UndoResult (
543553 action: action, needsRowRemoval: false , needsRowRestore: true , restoreRow: savedValues
@@ -629,6 +639,7 @@ final class DataChangeManager {
629639 let rowChange = RowChange ( rowIndex: rowIndex, type: . insert, cellChanges: cellChanges)
630640 changes. append ( rowChange)
631641 insertedRowIndices. insert ( rowIndex)
642+ insertedRowData [ rowIndex] = values
632643 }
633644
634645 rebuildChangeIndex ( )
0 commit comments