我在ARC环境中遇到类型转换问题。如果有人也愿意解决它:
当我使用这行代码时:
NSData *resultData = nil;
NSMutableDictionary *passwordQuery = [query mutableCopy];
[passwordQuery setObject: (id) kCFBooleanTrue forKey: (__bridge id) kSecReturnData];
status = SecItemCopyMatching((__bridge CFDictionaryRef) passwordQuery, (CFTypeRef *) &resultData);
然后我收到了一个错误:
Cast of an indirect pointer to an Objective C pointer to 'CFTypeRef*'(aka 'const void **')is disallowed with ARC.
请建议我以任何方式解决这个问题。
提前致谢..
答案 0 :(得分:5)
在调用CFTypeRef
之后,结果数据类型只是SecItemCopyMatching
,所以首先传入CFTypeRef
:
CFTypeRef resultData = nil;
status = SecItemCopyMatching((__bridge CFDictionaryRef) passwordQuery, &resultData);
由于查询指定resultData
应为CFDataRef
,resultData
现在为CFDataRef
,您现在可以将其转换为NSData
。然后将其进一步投入CFDataRef resultCFData = (CFDataRef)resultData;
NSData *resultNSData = (__bridge NSData *)resultCFData;
。
NSData *resultNSData = (__bridge NSData *)(CFDataRef)resultData;
或者在一行中:
{{1}}