我有一些用于钥匙串管理的代码。SecItemCopyMatching方法以名为foundDict的 (CFTypeRef *) 类型返回结果,该结果作为对 SecItemCopyMatching 方法的引用传递。然后我使用(__bridge_transfer NSData*)从 CFTypeRef* 桥接到 NSData* (到“结果”变量)。所以我期待结果变量当然是 NSData 类型,因为我是这样声明的,并使用桥将 CFTypeRef* 转换为 NSData*。但是当我想使用 NSString 方法将 NSData 转换为字符串时:initWithBytes:length:encoding,我得到一个运行时错误,告诉我“ [__NSCFArray bytes]: unrecognized selector set to instance.. ”
当我在 Xcode 中查看调试器时,我可以看到它为什么会抱怨,因为在“bridge”语句之后,“result”变量已从 NSData 转换为 __NSCFArray。而且由于 __NSCFArray 是一种数组类型,它不支持称为“字节”的方法,因此运行时会抱怨
所以,我不明白为什么在内部发生这种转换是从 NSData 到 __NSCFArray 最重要的是,如何将 CFTypeRef 类型的“SecItemCopyMatching”返回的结果转换为 NSData。有趣的是,我遵循 Apple 在KeychainWrapper 示例代码的钥匙串包装示例中建议的完全相同的代码
有什么想法吗?
我附上了调试器的图像: