【问题标题】:EXC_BAD_ACCESS exception on accessing name property of EspDevice class访问 EspDevice 类的名称属性时出现 EXC_BAD_ACCESS 异常
【发布时间】:2021-06-02 15:47:52
【问题描述】:

我在访问 EspDevice 类的 name 属性时遇到 EXC_BAD_ACCESS 异常。我需要访问 deviceName 这是一个私有属性,并且 name 导致了这个错误。有人可以帮我解决这个问题。谢谢

Bug image

【问题讨论】:

    标签: ios swift objective-c wifi provisioning


    【解决方案1】:

    NSLog 采用 NSStrings,但 os_log/print 采用 Swift Strings。
    遗憾的是,它们不是同一类型。所以你的 NSLog 会抛出 EXC_BAD_ACCESS

    由于您显然将代码暴露给了 Objective-C,因此最好使用 NSStrings 来避免这些陷阱。 您还可以使用强制转换来强制实现互操作行为。

    let mystr = "Samsung TV"
    let nsStr = mystr as NSString
    

    或

    var devices = [NSString]()
    

    但我想问题更深。 将断点设置到第 22 行并观察属性会发生什么。

    【讨论】:

      【解决方案2】:

      NSLog 是带有未定义数字参数的函数。并使用格式字符串来识别参数类型和计数。 因此,如果您的设备名称将具有%@,它将期望您已传入调用堆栈的第二个参数。访问无效参数会导致访问错误。

      你应该改用NSLog("%@", device.name)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-30
        • 1970-01-01
        • 2011-10-15
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        相关资源
        最近更新 更多