В NSViewController у меня есть переменная, определенная как @objc public styles:[String:[String:[Double]]] = [:]
.Это связано с двумя NSDictionaryControllers в InterfaceBuilder.Я могу добавлять, удалять редактировать его содержимое в представлении.Но проблема в том, когда я пытаюсь изменить значения в массивах [Double]
.Другое представление отправляет мне объект уведомления как (name:String, values:[Int:Double])
, где name - это ключ переменной словаря второго уровня, values - это словарь, где key - это индекс элемента, подлежащего изменению в массиве [Double]
, а value - новое значение для установки.
@objc func assign(_ notification:Notification) {
guard let change = notification.object as? (name:String, values:[Int:Double]) else {return}
for (axisName, styles) in styles {
if styles.keys.contains(change.name) {
for (index, value) in change.values {
print ("---------> change \(_styles[axis]?[change.name]), \(index)")
self.styles[axisName]?[change.name]?[index] = value
print ("---------> changed \(_styles[axis]?[change.name])")
}
}
}
print
заявления показывает мне, что значения установлены правильно.
---------> change Optional([0.0, 0.0]), 1
---------> changed Optional([0.0, 0.0005033827319587628])
---------> change Optional([0.0, 0.0005033827319587628]), 1
---------> changed Optional([0.0, 0.0005033827319587628])
---------> change Optional([0.0, 0.0005033827319587628]), 1
---------> changed Optional([0.0, 0.0020135309278350513])
....
Но если я изменю выделение и вернусь к тому же элементу, значения останутся неизменными, они имеют начальное значение 0.0
.Я пытался получить доступ к этим массивам через NSDictionaryController, но результат был тот же - без изменений.