【发布时间】:2021-06-02 15:47:52
【问题描述】:
我在访问 EspDevice 类的 name 属性时遇到 EXC_BAD_ACCESS 异常。我需要访问 deviceName 这是一个私有属性,并且 name 导致了这个错误。有人可以帮我解决这个问题。谢谢
【问题讨论】:
标签: ios swift objective-c wifi provisioning
我在访问 EspDevice 类的 name 属性时遇到 EXC_BAD_ACCESS 异常。我需要访问 deviceName 这是一个私有属性,并且 name 导致了这个错误。有人可以帮我解决这个问题。谢谢
【问题讨论】:
标签: ios swift objective-c wifi provisioning
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 行并观察属性会发生什么。
【讨论】:
NSLog 是带有未定义数字参数的函数。并使用格式字符串来识别参数类型和计数。
因此,如果您的设备名称将具有%@,它将期望您已传入调用堆栈的第二个参数。访问无效参数会导致访问错误。
你应该改用NSLog("%@", device.name)
【讨论】: