Сбой CFSetGetCount (EXC_BAD_ACCESS)

Я пишу приложение для Mac, которое взаимодействует с устройством USB HID. Для начала я пытаюсь распечатать, сколько устройств было найдено, которые соответствуют спецификациям моего устройства.

//Create a HID Manager
IOHIDManagerRef hidManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);

//Create a dictionary and limit it to the uPPT
CFMutableDictionaryRef dict = CFDictionaryCreateMutable (kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks,
                                                         &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(dict, CFSTR("VendorID"), CFSTR("0x04D8"));
CFDictionarySetValue(dict, CFSTR("ProductID"), CFSTR("0x0054"));
IOHIDManagerSetDeviceMatching(hidManager, dict);

CFSetRef devSet = IOHIDManagerCopyDevices (hidManager);
CFIndex numDevices = CFSetGetCount(devSet);
NSLog(@"%ld uPPTs found", numDevices);

К сожалению, это происходит сбой в CFSetGetCount(devSet). Насколько я могу судить, я использую это правильно, но приложение зависает, и я вижу "Поток 1: EXC_BAD_ACCESS (Code=1, Address=0x0)". Есть идеи? Спасибо

2 ответа

Решение

devSet является NULL (как видно из вашей аварии Address=0x0.) Вы должны всегда проверять на NULL при получении или создании CFTypeRef в Core Foundation, потому что API-интерфейсы Apple этого не делают и, как правило, выдают сбой NULL,

Кроме того, это не является причиной сбоя, но вы должны обязательно выпустить (с CFRelease()) CFTypeRefs вы создаете, копируете или сохраняете, поскольку ARC не сделает этого за вас. И как уже говорилось ранее, вы должны проверить NULL перед звонком CFRelease() потому что иначе произойдет сбой.

Причиной EXC_BAD_ACCESS является то, что вы не определили право доступа к аппаратному USB -устройству в своей изолированной программной среде приложения. Вы можете сделать это, установив флажок для USB - Оборудование в вашей: целевые параметры -> вкладка: Возможности.

Активировать аппаратный доступ через USB (право

источник: Apple Docs - Включение аппаратного доступа

Другие вопросы по тегам