NSClassFromString返回nil - Swift 4 - iOS 12

时间:2018-06-07 22:19:01

标签: ios swift casting

我遇到NSClassFromString返回nil的问题。

代码在过去一直很稳定,但经过一些重构和更新到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上构建。 在iOS 12的iPad上运行,目标是iOS 10。

0 个答案:

没有答案