NSClassFromString возвращает ноль - Swift 4 - iOS 12 - PullRequest
0 голосов
/ 08 июня 2018

У меня проблема с NSClassFromString, возвращающим ноль.

Код работал в прошлом, но после некоторого рефакторинга и обновления до iOS 12 он больше не работает ...

Код:

func recreateHistoryAction(pack: (id: String, date: Date, type: String, data: Data), done: @escaping (HistoryAction) -> ()) {
    if NSClassFromString(pack.type) as? HistoryAction.Type == nil {
        AnalyticsAssistant.shared.logError("pack.type \"\(pack.type)\" as class \"\(String(describing: NSClassFromString(pack.type)))\" does not conform to HistoryAction.Type.")
    }
--> let history_action_type = NSClassFromString(pack.type) as! HistoryAction.Type
    do {
        let tree = try JSONSerialization.jsonObject(with: pack.data, options: []) as! [String: Any]
        let history_action: HistoryAction = history_action_type.init(tree: tree)
        // ...
    // ...
}

Журнал распечатывается, поэтому приведение к HistoryAction.Type заканчивается на следующей строке.

Журнал:

pack.type "Pixel_Nodes.CreateNodeHistoryAction", поскольку класс "nil" не соответствует HistoryAction.Type.

Я дважды проверил пространство имен приложения и имя класса, это не проблема.

Структура подкласса:

HistoryAction -> NodeHistoryAction -> CreateNodeHistoryAction

Я заметил кое-что странное в области отладки;кортеж pack представлен дважды;один раз как локальная переменная с хорошими данными и один раз как аргумент с нечетными данными (pack.date - 2001-01-01, а pack.type ничего не показывает).

Вот область отладки с точки остановапо стрелке:

Debug Area at Breakpoint

@ OOPer упомяните, что это просто ошибка отладчика, хотя.

Вот всплывающее окноpack после аварии:

Popup on Crash

Кто-нибудь еще сталкивался с этим?Или я упускаю что-то очевидное?

Сборка на macOS Mojave, Xcode 10, Swift 4. Запуск на iPad с iOS 12, целевой iOS 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...