Objective c CFDictionaryGetValue抛出EXC\u错误\u访问

Objective c CFDictionaryGetValue抛出EXC\u错误\u访问,objective-c,swift,macos,core-foundation,Objective C,Swift,Macos,Core Foundation,我在Objective-C中发现了一个截取的代码,我目前正试图将其转换为Swift。 我试图从CFMutableDictionary中读取一个值,代码如下。但是,当我调用函数CFDictionaryGetValue时,我得到一个错误: 线程1:EXC_BAD_访问代码=1,地址=0x656d614e4f60 这是我目前的代码: 静态函数getGpuName{ 变量迭代器:io_迭代器_t=0 让errCode:kern\u return\u t=IOServiceGetMatchingServi

我在Objective-C中发现了一个截取的代码,我目前正试图将其转换为Swift。 我试图从CFMutableDictionary中读取一个值,代码如下。但是,当我调用函数CFDictionaryGetValue时,我得到一个错误: 线程1:EXC_BAD_访问代码=1,地址=0x656d614e4f60

这是我目前的代码:

静态函数getGpuName{ 变量迭代器:io_迭代器_t=0 让errCode:kern\u return\u t=IOServiceGetMatchingServiceskIOMasterPortDefault、IOServiceMatchingIOPCIDevice和迭代器 如果errCode!=kioreturnsucture{ FatalError无法检索\IOPCIDevice的服务字典\ } //在pci设备上迭代 var device=IOIteratorNextiterator 而设备!=0{ var unmanagedServiceDictionary:非托管? 如果IORegistryEntryCreateCPropertiesDevice、非托管服务目录、kCFAllocatorDefault、0!=kIOReturnSuccess{ IOObjectReleasedevice 持续 } 如果让serviceDictionary:CFMutableDictionary=unmanagedServiceDictionary?.takeRetainedValue{ 让name=CFDictionaryGetValueserviceDictionary,IOName } //释放设备 IOObjectReleasedevice //从迭代器获取下一个设备 设备=IO迭代器或外部迭代器 } } 有人知道我如何读取CFMutableDictionary的值吗


谢谢:

好的,经过进一步研究,我仍然不知道为什么会抛出错误。不过,我找到了一个解决办法,将字典转换为NSDictionary

下面的代码现在可以工作了:

让serviceDictionary:NSDictionary=unmanagedServiceDictionary?。获取保留值!作为词典 如果let name=serviceDictionary.valueforKey:IOName as?串{ 打印名 }
处理CoreFoundation API真是一件痛苦的事情

发生此错误的原因是无法将文字字符串作为CFDictionaryGetValue的第二个参数传递,该参数必须是UnsafeRawPointer

然而,解决方案相当简单。把字典换成快捷字典

if let serviceDictionary = unmanagedServiceDictionary?.takeRetainedValue() as? [String:Any] {
    if let name = serviceDictionary["IOName"] as? String {
        print(name)
    }
}