1

我正在尝试使用 combine 观察 ViewModel 中 NSMutableOrderedSet 的变化。我想知道何时添加或删除 NSMutableOrderedSet 的某些元素

我的 ViewModel 的一些代码:

    class TrainingAddExerciceViewModel: ObservableObject {
        
        @Published var exercice: Exercice?
        @Published var serieHistories = NSMutableOrderedSet()
    
    ...
      init(...) {
        ...
        
//Where i'm trying to observe 
        $serieHistories
            .sink { (value) in
                print(value)
        }
        .store(in: &self.cancellables)
    }
    
    }

这是我在 ViewModel 中用来向 NSMutableOrderedSet 添加元素的函数:

func add(managedObjectContext: NSManagedObjectContext) {
        let newSerieHistory = ExerciceSerieHistory(context: managedObjectContext)
        self.serieHistories.add(newSerieHistory)
        self.updateView()
    }

我有一些其他发布者与其他类型(自定义类)合作良好。

我错过了什么 ?

4

1 回答 1

1

如果我正确理解了您的代码逻辑,请尝试以下操作(init不需要)

  1. 变体 1 - 添加强制更新

    函数更新视图(){

     // ... other code
    
     self.objectWillChange.send()
    

    }

  2. 变体 2 - 重新创建存储

func add(managedObjectContext: NSManagedObjectContext) {
        let newSerieHistory = ExerciceSerieHistory(context: managedObjectContext)
        let newStorage = NSMutableOrderedSet(orderedSet: self.serieHistories)

        newStorage.add(newSerieHistory)
        self.serieHistories = newStorage     // << fires publisher

        self.updateView()
    }
于 2020-07-31T19:42:13.553 回答