Xcode 11.4: выполнение executeSelector Сервер LLDB RP C потерпел крах - PullRequest
1 голос
/ 30 марта 2020

У меня проблема с Xcode 11.4, использующим Swift 5.2 при попытке получить значение fun c при выполнении селектора. Это произошло с функцией, которая возвращает тип Number или Bool. Вот мой код:

if returnReadableType == "NSInteger" {
    let c: NSObject.Type = cls as! NSObject.Type
    if let performValue = c.perform(originalSelector)?.toOpaque() {
        let originalResponse: Int = Int(bitPattern: performValue)
        configDataResult[name] = originalResponse
    }
} else if returnReadableType == "BOOL" {
    let c: NSObject.Type = cls as! NSObject.Type
    if let performValue = c.perform(originalSelector)?.toOpaque() {
        let originalResponse: Bool = Bool(truncating: Int(bitPattern: performValue) as NSNumber)
        configDataResult[name] = originalResponse
    }
}

Чтобы объяснить код, я пытаюсь выполнить селектор, чтобы получить его значение для быстрого просмотра их во время выполнения. Поскольку я не знаю, сколько вычисляемых свойств в классе будет объявлено, поэтому я использовал метод class_copyMethodList , чтобы получить весь метод в cls. Затем с помощью некоторого трюка для определения типа возвращаемого значения - returnReadableType, (в строке) каждого метода. С returnReadableType равны BOOL или NSInteger , я получил cra * sh при выполнении селектора. Журнал cra sh:

Message from debugger: The LLDB RPC server has crashed. The crash log is located in ~/Library/Logs/DiagnosticReports and has a prefix 'lldb-rpc-server'. Please file a bug and attach the most recent crash log.

Этого не произошло в

...