Skip to content

Commit e1a58fb

Browse files
committed
fix regressing behavior in developer-defined custom properties
1 parent a33d2a6 commit e1a58fb

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

Sources/FoundationEssentials/ProgressManager/ProgressManager+State.swift

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,10 @@ extension ProgressManager {
527527
if childPropertyState.isDirty {
528528
if let child = child.manager {
529529
dirtyChildren.append((idx, child))
530+
} else {
531+
// Child is dirty but manager is deallocated - use last known value
532+
let isAlive = false
533+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
530534
}
531535
} else {
532536
let isAlive = child.manager != nil
@@ -536,6 +540,10 @@ extension ProgressManager {
536540
// Property doesn't exist yet in child - need to fetch it
537541
if let child = child.manager {
538542
dirtyChildren.append((idx, child))
543+
} else {
544+
// Child manager is deallocated, use default value
545+
let isAlive = false
546+
nonDirtySummaries.append((idx, property.defaultValue, isAlive))
539547
}
540548
}
541549
}
@@ -590,6 +598,10 @@ extension ProgressManager {
590598
if childPropertyState.isDirty {
591599
if let child = child.manager {
592600
dirtyChildren.append((idx, child))
601+
} else {
602+
// Child is dirty but manager is deallocated - use last known value
603+
let isAlive = false
604+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
593605
}
594606
} else {
595607
let isAlive = child.manager != nil
@@ -599,6 +611,10 @@ extension ProgressManager {
599611
// Property doesn't exist yet in child - need to fetch it
600612
if let child = child.manager {
601613
dirtyChildren.append((idx, child))
614+
} else {
615+
// Child manager is deallocated, use default value
616+
let isAlive = false
617+
nonDirtySummaries.append((idx, property.defaultValue, isAlive))
602618
}
603619
}
604620
}
@@ -653,6 +669,10 @@ extension ProgressManager {
653669
if childPropertyState.isDirty {
654670
if let child = child.manager {
655671
dirtyChildren.append((idx, child))
672+
} else {
673+
// Child is dirty but manager is deallocated - use last known value
674+
let isAlive = false
675+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
656676
}
657677
} else {
658678
let isAlive = child.manager != nil
@@ -662,6 +682,10 @@ extension ProgressManager {
662682
// Property doesn't exist yet in child - need to fetch it
663683
if let child = child.manager {
664684
dirtyChildren.append((idx, child))
685+
} else {
686+
// Child manager is deallocated, use default value
687+
let isAlive = false
688+
nonDirtySummaries.append((idx, property.defaultValue, isAlive))
665689
}
666690
}
667691
}
@@ -716,6 +740,10 @@ extension ProgressManager {
716740
if childPropertyState.isDirty {
717741
if let child = child.manager {
718742
dirtyChildren.append((idx, child))
743+
} else {
744+
// Child is dirty but manager is deallocated - use last known value
745+
let isAlive = false
746+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
719747
}
720748
} else {
721749
let isAlive = child.manager != nil
@@ -725,6 +753,10 @@ extension ProgressManager {
725753
// Property doesn't exist yet in child - need to fetch it
726754
if let child = child.manager {
727755
dirtyChildren.append((idx, child))
756+
} else {
757+
// Child manager is deallocated, use default value
758+
let isAlive = false
759+
nonDirtySummaries.append((idx, property.defaultSummary, isAlive))
728760
}
729761
}
730762
}
@@ -779,6 +811,10 @@ extension ProgressManager {
779811
if childPropertyState.isDirty {
780812
if let child = child.manager {
781813
dirtyChildren.append((idx, child))
814+
} else {
815+
// Child is dirty but manager is deallocated - use last known value
816+
let isAlive = false
817+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
782818
}
783819
} else {
784820
let isAlive = child.manager != nil
@@ -788,6 +824,10 @@ extension ProgressManager {
788824
// Property doesn't exist yet in child - need to fetch it
789825
if let child = child.manager {
790826
dirtyChildren.append((idx, child))
827+
} else {
828+
// Child manager is deallocated, use default value
829+
let isAlive = false
830+
nonDirtySummaries.append((idx, property.defaultSummary, isAlive))
791831
}
792832
}
793833
}
@@ -842,6 +882,10 @@ extension ProgressManager {
842882
if childPropertyState.isDirty {
843883
if let child = child.manager {
844884
dirtyChildren.append((idx, child))
885+
} else {
886+
// Child is dirty but manager is deallocated - use last known value
887+
let isAlive = false
888+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
845889
}
846890
} else {
847891
let isAlive = child.manager != nil
@@ -851,6 +895,10 @@ extension ProgressManager {
851895
// Property doesn't exist yet in child - need to fetch it
852896
if let child = child.manager {
853897
dirtyChildren.append((idx, child))
898+
} else {
899+
// Child manager is deallocated, use default value
900+
let isAlive = false
901+
nonDirtySummaries.append((idx, property.defaultSummary, isAlive))
854902
}
855903
}
856904
}
@@ -905,6 +953,10 @@ extension ProgressManager {
905953
if childPropertyState.isDirty {
906954
if let child = child.manager {
907955
dirtyChildren.append((idx, child))
956+
} else {
957+
// Child is dirty but manager is deallocated - use last known value
958+
let isAlive = false
959+
nonDirtySummaries.append((idx, childPropertyState.value, isAlive))
908960
}
909961
} else {
910962
let isAlive = child.manager != nil
@@ -914,6 +966,10 @@ extension ProgressManager {
914966
// Property doesn't exist yet in child - need to fetch it
915967
if let child = child.manager {
916968
dirtyChildren.append((idx, child))
969+
} else {
970+
// Child manager is deallocated, use default value
971+
let isAlive = false
972+
nonDirtySummaries.append((idx, property.defaultValue, isAlive))
917973
}
918974
}
919975
}

0 commit comments

Comments
 (0)