类型转换导致ARC环境中的编译错误

时间:2012-09-08 07:25:56

标签: ios automatic-ref-counting type-conversion

我在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.

请建议我以任何方式解决这个问题。

提前致谢..

1 个答案:

答案 0 :(得分:5)

在调用CFTypeRef之后,结果数据类型只是SecItemCopyMatching,所以首先传入CFTypeRef

CFTypeRef resultData = nil;
status = SecItemCopyMatching((__bridge CFDictionaryRef) passwordQuery,  &resultData);

由于查询指定resultData应为CFDataRefresultData现在为CFDataRef,您现在可以将其转换为NSData。然后将其进一步投入CFDataRef resultCFData = (CFDataRef)resultData; NSData *resultNSData = (__bridge NSData *)resultCFData;

NSData *resultNSData = (__bridge NSData *)(CFDataRef)resultData;

或者在一行中:

{{1}}