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

Vin*_*ngh 6 type-conversion ios automatic-ref-counting

我在ARC环境中的类型转换有问题.如果有人也愿意解决它:

当我使用这行代码时:

NSData *resultData = nil;

NSMutableDictionary *passwordQuery = [query mutableCopy];

[passwordQuery setObject: (id) kCFBooleanTrue forKey: (__bridge  id) kSecReturnData];

status = SecItemCopyMatching((__bridge  CFDictionaryRef) passwordQuery, (CFTypeRef *) &resultData);
Run Code Online (Sandbox Code Playgroud)

然后我收到一个错误:

Cast of an indirect pointer to an Objective C pointer to 'CFTypeRef*'(aka 'const void **')is disallowed with ARC.

请建议我任何方法来解决这个问题..

提前致谢..

Mr.*_*rna 6

结果数据类型只是CFTypeRef在调用之后才SecItemCopyMatching开始传入CFTypeRef:

CFTypeRef resultData = nil;
status = SecItemCopyMatching((__bridge CFDictionaryRef) passwordQuery,  &resultData);
Run Code Online (Sandbox Code Playgroud)

由于查询指定的resultData应该是CFDataRefresultData现在是CFDataRef,你现在可以施放它是这样.然后把它进一步投入到NSData.

CFDataRef resultCFData = (CFDataRef)resultData;
NSData *resultNSData = (__bridge NSData *)resultCFData;
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

NSData *resultNSData = (__bridge NSData *)(CFDataRef)resultData;
Run Code Online (Sandbox Code Playgroud)