(__bridge__transfer NSData*) возвращает _NSCFArray вместо NSData

У меня есть код, который я использую для управления цепочкой для ключей. Метод SecItemCopyMatching возвращает результат в виде (CFTypeRef *) с именем foundDict, который передается как ссылка на метод SecItemCopyMatching. Затем я использую (__bridge_transfer NSData *) для перехода от CFTypeRef * к NSData* (в переменную "result"). Поэтому я ожидал, что результирующая переменная будет, конечно, иметь тип NSData, потому что я объявил об этом и использовал мост для преобразования CFTypeRef * в NSData*. Но когда я хочу преобразовать NSData в строку, используя метод NSString: initWithBytes: length: encoding, я получаю сообщение об ошибке во время выполнения, которое сообщает мне "[__NSCFArray bytes]: нераспознанный селектор установлен в экземпляр.."

Когда я посмотрел в отладчике в Xcode, я понял, почему он жалуется, потому что переменная "result" была преобразована из NSData в __NSCFArray после оператора "bridge". А поскольку __NSCFArray является типом массива, он не поддерживает метод, называемый "байтами", и, следовательно, время выполнения жалуется

Итак, я не понимаю, почему внутренне это преобразование происходит из NSData в __NSCFArray. И самое главное, как правильно преобразовать результаты, возвращаемые "SecItemCopyMatching", который имеет тип CFTypeRef, в NSData. Самое смешное, что я следую точно такому же коду, предложенному Apple в своем примере обертки цепочки для ключей на примере кода KeychainWrapper.

Какие-нибудь мысли?

Я прилагаю изображение отладчика:

введите описание изображения здесь

0 ответов

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