Я пытаюсь создать контурное представление в приложении MacOS, которое имеет уровни множественности, которые являются сводными данными для набора данных, хранящихся в SQLite3.У меня есть наброски, работающие с древовидным контроллером с очень простым NSMutuableDictionary на основе класса модели.
import Cocoa
class Summary: NSObject {
@objc dynamic var name: String
@objc dynamic var trades: Int
@objc dynamic var avgPL: Double
@objc dynamic var pandl: Double
@objc dynamic var parent: String
@objc dynamic var isLeaf: Bool
@objc dynamic var childCount: Int
@objc dynamic var children: [Summary] = []
init(name: String, trades: Int, avgPL: Double, pandl: Double, parent: String, isLeaf: Bool,childCount: Int) {
self.name = name
self.trades = trades
self.avgPL = avgPL
self.pandl = pandl
self.parent = parent
self.isLeaf = isLeaf
self.childCount = childCount
}
@objc func add(child: Summary) {
children.append(child)
}
}
Мой простой пример данных:
let root: [String : Any] = ["name": "Overall","trades":5,"avgPL":200,"pandl":500,"parent":"","isLeaf": false,"childCount": 2 ]
let dict: NSMutableDictionary = NSMutableDictionary(dictionary: root)
let l2a = Summary(name: "L2a", trades: 3, avgPL: 100, pandl: 300, parent: "L1",isLeaf: true,childCount: 0)
let l2b = Summary(name: "L2b", trades: 2, avgPL: 100, pandl: 200, parent: "L1",isLeaf: true,childCount: 0)
dict.setObject([l2a,l2b], forKey: "children" as NSCopying)
Я передаю словарь в TreeController:
treeController.addObject(dict)
И это прекрасно работает, давая мне складной контур:
Но я понятия не имею, как добавить ещеуровни или дети для детей.Я хочу иметь до четырех уровней в общих чертах.У меня работают все сводки SQL, и я пробовал так много вариантов заполнения массивов и пытался создать словарь с данными безрезультатно.У меня есть children, childCount и isLeaf, установленные на все, но treecontroller не нравится массив, жалующийся на то, что isLeaf не совместим с KVO.Мои данные в массиве выглядят так (не все данные, но достаточно, чтобы увидеть, что я делаю). Основной уровень и все последующие дочерние элементы основаны на классе модели Summary выше.Могу ли я просто преобразовать этот массив в словарь?Или я могу сделать его совместимым с KVO, добавив ключи к классу модели или что-то еще?У меня есть все 4 уровня в отдельных массивах, которые я использую для построения результирующего массива, если это полезно:
Я должен добавить, что у меня естьNSObject определен как NSMutableArray, а его содержимое связано с treeController.Мой treeController привязан к каждой переменной в классе модели и на верхнем уровне имеет:
Если я передам массив, который я построил, в treeControllerЯ получаю следующую ошибку:
Failed to set (contentViewController) user defined inspected property on (NSWindow): [<_TtGCs23_ContiguousArrayStorageC11outlinetest7Summary_ 0x604000445160> addObserver:forKeyPath:options:context:] is not supported. Key path: isLeaf